Curso completo de Python con 10 proyectos reales (NUEVO) | Ardit Sulce | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Curso completo de Python con 10 proyectos reales (NUEVO)

teacher avatar Ardit Sulce, Python Instructor, Founder of PythonHow

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Video de introducción

      1:53

    • 2.

      Introducción a los primeros pasos

      1:39

    • 3.

      Instalar Python y el IDE

      0:57

    • 4.

      Instrucciones de instalación en Windows +

      5:56

    • 5.

      Instrucciones de instalación en Mac +

      5:12

    • 6.

      Instrucciones de instalación en Linux +

      2:11

    • 7.

      Crear y ejecutar un programa de Python

      9:29

    • 8.

      ¿Qué es Python sorprendentemente?

      3:35

    • 9.

      Introducción a los conceptos básicos de Python

      1:39

    • 10.

      Variables: por qué y cómo usar las variables +

      6:05

    • 11.

      Cómo usar el shell interactivo de Python

      7:03

    • 12.

      Uso del terminal

      4:17

    • 13.

      Tipos simples: enteros, cadenas y flotadores

      3:21

    • 14.

      Tipos de datos de lista

      1:31

    • 15.

      Uso de rangos

      5:18

    • 16.

      Cuáles son los atributos de los tipos de datos

      2:54

    • 17.

      Cómo averiguar qué código necesitas

      3:33

    • 18.

      Tipos de datos de diccionario

      3:43

    • 19.

      Qué hace que un programador sea un programador

      2:10

    • 20.

      Tipos de datos de tuple

      2:26

    • 21.

      Uso de tipos de datos en el mundo real +

      1:07

    • 22.

      Operaciones con tipos de datos

      0:55

    • 23.

      Mensajes de error en Python 3.10

      4:00

    • 24.

      Hacer más operaciones con listas

      5:56

    • 25.

      Cómo acceder a los elementos de la lista

      2:04

    • 26.

      Cómo acceder a los segmentos de la lista

      2:49

    • 27.

      Cómo usar los índices negativos

      2:02

    • 28.

      Cómo acceder a personajes y rebanados en cadenas

      1:30

    • 29.

      Cómo acceder a elementos en los diccionarios +

      1:52

    • 30.

      Más conceptos básicos de Python: funciones y condicionales

      1:39

    • 31.

      Cómo crear tus propias funciones +

      5:25

    • 32.

      Cuándo usar Print and Return +

      3:59

    • 33.

      Introducción a los condicionales

      0:58

    • 34.

      Cómo usar la condicional If

      3:48

    • 35.

      Una explicación condicional línea por línea

      3:09

    • 36.

      Más información sobre las condiciones y

      2:21

    • 37.

      Usar el condicional Elif

      1:15

    • 38.

      Espacio blanco y

      3:30

    • 39.

      Más conceptos básicos de Python: procesamiento de la entrada del usuario

      0:38

    • 40.

      Aprende más sobre la entrada del usuario

      7:55

    • 41.

      Formato de cadena y

      4:51

    • 42.

      Formato de cadena con múltiples variables +

      4:17

    • 43.

      Introducción a For Loops +

      0:59

    • 44.

      Cómo y por qué usar bucles

      5:46

    • 45.

      Cómo hacer un bucle en un diccionario +

      1:12

    • 46.

      Cómo y por qué usar bucles While

      2:59

    • 47.

      Bucles con entrada del usuario

      3:12

    • 48.

      Bucles duros, pausas y continuaciones +

      3:22

    • 49.

      Construir un programa en Python

      0:59

    • 50.

      Declaración de problemas en Python

      3:48

    • 51.

      Abordar el problema

      1:46

    • 52.

      Cómo crear la función de maker

      5:14

    • 53.

      Construir el bucle

      4:39

    • 54.

      Haz que el resultado sea fácil de usar

      3:28

    • 55.

      Introducción a la comprensión de listas

      0:50

    • 56.

      Una simple comprensión de una lista

      3:27

    • 57.

      Comprensión de listas con una condicional si

      1:22

    • 58.

      Comprensión de listas con un condicional "si-else" +

      1:37

    • 59.

      Más sobre las funciones

      0:35

    • 60.

      Funciones con múltiples argumentos

      1:45

    • 61.

      Parámetros predeterminados y no predeterminados, palabras clave y argumentos no clave

      3:00

    • 62.

      Funciones con un número arbitrario de argumentos no palabra clave

      3:32

    • 63.

      Funciones con un número arbitrario de argumentos de palabras clave +

      1:34

    • 64.

      Introducción al procesamiento de archivos

      1:30

    • 65.

      Procesamiento de archivos con Python

      1:12

    • 66.

      Leer textos de un archivo +

      3:07

    • 67.

      Cursor de archivos

      1:49

    • 68.

      Cerrar un archivo

      1:34

    • 69.

      Abrir archivos con

      1:45

    • 70.

      Uso de diferentes rutas de archivo

      1:25

    • 71.

      Escribir texto en un archivo

      3:59

    • 72.

      Cómo agregar texto a un archivo existente +

      3:30

    • 73.

      Módulos incorporados en Python

      5:53

    • 74.

      Módulos estándar de Python

      8:34

    • 75.

      Módulos de terceros

      6:28

    • 76.

      Un ejemplo de módulos de terceros

      2:45

    • 77.

      Introducción al uso de Python con archivos CSV, JSON y Excel

      0:35

    • 78.

      La biblioteca Pandas para + análisis de datos

      3:07

    • 79.

      Primeros pasos con Pandas

      8:37

    • 80.

      Configuración del cuaderno Jupyter +

      9:05

    • 81.

      Cargar archivos Csv en Python

      4:20

    • 82.

      Cargar archivos de Excel en Python

      0:58

    • 83.

      Cargar archivos de texto en Python

      2:30

    • 84.

      Introducción a Numpy ++

      8:07

    • 85.

      Cómo convertir imágenes en matrices numéricas

      5:40

    • 86.

      Indexación, rebanado e iteración de matrices numpicadas

      4:07

    • 87.

      Apilar y dividir matrices numéricas.

      5:44

    • 88.

      Aplicación 1: mapa web con Python y HTML +

      1:05

    • 89.

      HTML y Python: crea un mapa HTML con Python +

      11:35

    • 90.

      HTML&Python Añadir un marcador al mapa

      8:23

    • 91.

      HTML y Python: uso de bucles para agregar varios marcadores

      4:43

    • 92.

      HTML y Python: procesamiento de archivos mediante la adición de marcadores desde archivos

      13:06

    • 93.

      HTML y Python: manipulación de cadenas

      5:07

    • 94.

      Uso de funciones: crear una función de generación de color para marcadores ++

      7:55

    • 95.

      HTML y Python: cómo agregar y estilizar marcadores

      1:53

    • 96.

      HTML y Python: trabajar con datos JSON

      5:34

    • 97.

      Python y JSON: añadir una capa de mapa de población

      3:20

    • 98.

      Python y JSON: estilizar la capa de población

      9:34

    • 99.

      Python y JSON: añadir un panel de control de capa +

      6:23

    • 100.

      Aplicación 2: tesauro en inglés +

      4:10

    • 101.

      Comprender tu set de datos en Python +

      4:54

    • 102.

      Cargar datos JSON en Python

      3:52

    • 103.

      Haz que la aplicación devuelva la definición de una palabra

      3:25

    • 104.

      Cómo la aplicación trata las palabras no existentes

      2:51

    • 105.

      Cómo trata la aplicación las palabras con mayúsculas

      3:09

    • 106.

      Cómo calcular la similitud entre palabras

      4:39

    • 107.

      Cómo encontrar las mejores coincidencias a partir de una lista de palabras

      6:07

    • 108.

      Encontrar la palabra más similar de un grupo de palabras

      9:42

    • 109.

      Obtener la confirmación del usuario

      10:17

    • 110.

      Optimización del resultado final +

      7:51

    • 111.

      Cómo corregir errores de sintaxis en Python

      8:22

    • 112.

      Cómo corregir errores de ejecución en Python

      10:58

    • 113.

      Cómo corregir errores difíciles

      5:38

    • 114.

      Cómo hacer una buena pregunta de programación

      5:59

    • 115.

      Cómo hacer que el código maneje los errores por sí mismo

      7:59

    • 116.

      Introducción a la visión por computadora con Python +

      2:29

    • 117.

      Cargar, visualizar, cambiar el tamaño y crear imágenes + + con OpenCV

      14:00

    • 118.

      Explicación del ejercicio anterior

      4:29

    • 119.

      Detección de rostros en imágenes con OpenCv y Python

      19:38

    • 120.

      Captura videos con OpenCv y Python

      19:45

    • 121.

      Aplicación 3: aplicación de detector de movimiento con webcam

      1:58

    • 122.

      Detección de objetos en movimiento desde el campamento web con Python

      29:57

    • 123.

      Almacenar marcas de tiempo de detección de objetos en un archivo CSV ++

      20:38

    • 124.

      Introducción a la biblioteca Bokeh +

      2:02

    • 125.

      Cómo crear tu primera trama bokeh

      13:52

    • 126.

      Cómo usar Bokeh con pandas +

      4:51

    • 127.

      Crear una trama de series de tiempo +

      6:36

    • 128.

      Más ejemplos de visualización con Bokeh

      4:21

    • 129.

      Dibujo de intervalos de tiempo a partir de los datos generados por la aplicación de cámara web

      14:05

    • 130.

      Implementar una función de desplazamiento

      9:57

    • 131.

      App 4 parte 1: análisis de datos y visualizaciones con Pandas y Matplotlib +++

      2:52

    • 132.

      Explorar el set de datos con Python y Pandas +

      9:17

    • 133.

      Selección de datos con Python

      13:32

    • 134.

      Filtrado del conjunto de datos

      7:58

    • 135.

      Filtrado basado en el tiempo

      9:55

    • 136.

      Convertir datos en información

      11:00

    • 137.

      Agregar y graficar las calificaciones medias por día

      14:43

    • 138.

      Minústreo y gráfico de las calificaciones medias por semana

      9:42

    • 139.

      Minústreo y grabado de calificaciones medias por mes

      2:16

    • 140.

      Calificaciones promedio por curso por mes

      10:44

    • 141.

      En qué día de la semana la gente es más feliz

      9:45

    • 142.

      Otros tipos de tramas +

      6:06

    • 143.

      Aplicación 4 (parte 2): análisis y visualización de datos con diagramas interactivos en el navegador

      2:55

    • 144.

      Cómo crear una aplicación web sencilla

      12:24

    • 145.

      Cómo crear una aplicación web para visualizar datos

      23:26

    • 146.

      Cambiar las etiquetas de gráficos en la aplicación web

      2:59

    • 147.

      Cómo agregar un gráfico de series temporales a la aplicación web

      5:20

    • 148.

      Tramas de series temporales múltiples

      18:59

    • 149.

      Creación de múltiples streamgraphs de series temporales

      6:55

    • 150.

      Agregar un gráfico de torta a la aplicación web +

      9:29

    • 151.

      Demostración de la aplicación 5: desarrollo web con Flask: cómo crear un sitio web personal

      1:41

    • 152.

      Tu primer sitio web de Flask con advertencia de servidor agregada

      8:07

    • 153.

      Preparación de plantillas HTML +

      4:09

    • 154.

      Cómo agregar un menú de navegación de sitio web

      8:32

    • 155.

      Cómo mejorar la interfaz de sitio web con CSS ++

      5:59

    • 156.

      Creación de un entorno virtual con Python

      6:22

    • 157.

      Cómo usar el servicio PythonAnywhere

      7:47

    • 158.

      Despliega la aplicación Flask en PythonAnywhere +

      7:52

    • 159.

      Introducción a la biblioteca de Tkinter

      2:35

    • 160.

      Cómo crear una ventana GUI y agregar widgets

      9:11

    • 161.

      Conectar widgets de GUI con funciones ++

      9:32

    • 162.

      Cómo interactúa Python con las bases de datos

      3:00

    • 163.

      Conexión a una base de datos SQLite con Python

      13:11

    • 164.

      SQLite: selección, inserción, eliminación y actualización de registros SQL

      6:53

    • 165.

      Base de datos PostgreSQL con Python

      8:46

    • 166.

      PostGreSQL: selección, inserción, eliminación y actualización de registros SQL

      12:51

    • 167.

      Aplicación 6: aplicación de inventario de libros

      2:25

    • 168.

      Diseño de la interfaz de usuario

      5:54

    • 169.

      Codificación de la interfaz del usuario final

      13:28

    • 170.

      Programación del backend de la aplicación

      24:28

    • 171.

      Conectar la interfaz de usuario con la interfaz de usuario, Parte 1

      17:30

    • 172.

      Cómo conectar la interfaz de usuario con la interfaz de usuario, Parte 2 ++

      21:59

    • 173.

      Creación de ejecutables .exe y .app desde el script Python

      5:00

    • 174.

      Qué es la programación orientada a objetos (OOP)

      4:59

    • 175.

      Uso de POO en un programa, parte 1

      13:01

    • 176.

      Uso de POO en un programa

      14:05

    • 177.

      Crear una página de inicio de sesión del usuario

      21:55

    • 178.

      Cómo crear una clase de cuenta bancaria

      21:10

    • 179.

      Crear clases mediante herencia

      12:08

    • 180.

      Glosario de POO +++

      8:12

    • 181.

      Aplicación 7: demostración de una aplicación móvil para sentirse bien +

      1:27

    • 182.

      Crear una página de registro de usuario

      9:52

    • 183.

      Capturar la información del usuario

      6:25

    • 184.

      Procesamiento de las inscripciones de usuarios y +

      11:22

    • 185.

      Crear una página para el éxito del registro

      4:27

    • 186.

      Cambiar entre páginas

      2:55

    • 187.

      Procesamiento de credenciales de inicio de sesión del usuario

      16:52

    • 188.

      Mostrar la salida al usuario +

      15:10

    • 189.

      Estilizar la página de inicio de sesión

      14:22

    • 190.

      Estilizar la página de registro

      1:11

    • 191.

      Hacer que los botones sean interactivos

      9:01

    • 192.

      Crear un área desplazable

      8:22

    • 193.

      Preparación del entorno para desplegar la aplicación móvil

      13:10

    • 194.

      Creación de un archivo APK para Android

      10:29

    • 195.

      Instalación del archivo APK en Android

      3:52

    • 196.

      Raspado web con Python y Beautiful Soup

      1:57

    • 197.

      Cómo funciona el raspado web +

      4:30

    • 198.

      Ejemplo de raspado web con Python

      16:22

    • 199.

      Aplicación 8: demostración de la aplicación de web scraping ++

      2:28

    • 200.

      Cargar la página web en Python

      7:15

    • 201.

      Extraer elementos Div

      11:34

    • 202.

      Raspar las direcciones de las propiedades

      14:39

    • 203.

      Raspar elementos especiales

      12:06

    • 204.

      Guardar los datos extraídos en archivos CSV

      8:26

    • 205.

      Rastreo a través de varias páginas web +

      17:15

    • 206.

      Aplicación 9: blog y aplicación Translator + Django y Bootstrap

      10:56

    • 207.

      Configuración de un entorno virtual

      12:42

    • 208.

      Creación de proyectos de Django

      11:12

    • 209.

      Creación de un modelo de base de datos para la aplicación de blog

      12:22

    • 210.

      Vistas en Djago

      4:41

    • 211.

      Patrones de URL

      15:16

    • 212.

      Creación de vistas de la interfaz de administración

      8:51

    • 213.

      Crear la página de inicio

      7:32

    • 214.

      Crear la página Acerca de

      2:44

    • 215.

      Cómo publicar publicaciones de blog en la página de inicio

      8:04

    • 216.

      Cómo agregar Bootstrap a Django

      16:28

    • 217.

      Herencia de plantillas

      12:37

    • 218.

      Aplicación de estilo de Bootstrap al menú de navegación

      4:14

    • 219.

      Demostración de la aplicación de traducción Django

      3:11

    • 220.

      El paso del desarrollo de aplicaciones de Django

      3:29

    • 221.

      Crear una estructura de aplicación vacía para la aplicación Translator

      2:39

    • 222.

      Cómo crear una forma de Django

      7:45

    • 223.

      Obtener y procesar la información del usuario a través de un formulario

      10:09

    • 224.

      Completar la aplicación Translator

      6:12

    • 225.

      Demostración de la aplicación 10: aplicación web de geocodificador +

      7:31

    • 226.

      Parte 1 de cómo crear la aplicación web de geocodificador

      16:21

    • 227.

      Parte 2 de cómo crear la aplicación web de geocodificador +

      5:51

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

119

Estudiantes

--

Proyectos

Acerca de esta clase

ACERCA DE ESTA CLASE

Si siempre has querido aprender Python pero no tienes experiencia previa en programación, ¡esta clase es para ti!

Ardit ha pasado años enseñando Python a principiantes y ha desarrollado un enfoque práctico y basado en proyectos que hace que el aprendizaje sea divertido y práctico. Obtendrás habilidades esenciales de programación mientras trabajas en aplicaciones del mundo real, lo que te ayudará a desarrollar confianza e independencia en la programación.

En esta clase aprenderás a hacer lo siguiente:

  • Fundamentos de Python, incluyendo sintaxis, variables, bucles y funciones

  • Cómo crear 10 aplicaciones del mundo real de principio a fin

  • Desarrollo web con Flask y Django

  • Técnicas de análisis de datos y visualización

  • Desarrollo de aplicaciones GUI de escritorio

  • Técnicas de raspado web para extraer datos de sitios web

  • Implementación de aplicaciones en servidores en vivo y creación de ejecutables independientes

  • Las mejores prácticas para escribir código limpio, eficiente y mantenible

Crearás un portafolio de 10 aplicaciones prácticas, que incluirán:

  1. Un generador de mapas web de volcanes

  2. Un detector de objetos con transmisiones de cámara web en vivo

  3. Un sitio web personal con Python y Flask

  4. Una aplicación de escritorio para inventario de libros con una base de datos SQL

  5. Un panel de análisis y visualización de datos

  6. Una aplicación móvil compatible con Android y iOS

  7. Un rascador web de bienes raíces

  8. Una aplicación web basada en formularios que recopila y envía por correo electrónico datos de usuarios

  9. Una aplicación web de blog y traductor creada con Django

  10. Un procesador de archivos Excel para la gestión de datos

Incluso si eres completamente nuevo en la programación, ¡estas técnicas paso a paso te resultarán fáciles de seguir y aplicar a tus propios proyectos!

¿Cómo encontrar los recursos conectados a las lecciones? 

Si ves que el nombre de una lección sigue un signo "+", consulta los archivos adjuntos disponibles en este enlace para encontrar un recurso con el mismo número que la lección con el signo "+". Allí también encontrarás el código fuente de las 10 aplicaciones construidas en el curso.

También puedes encontrar a Ardit aquí:
Sitio web: https://pythonhow.com/

Conoce a tu profesor(a)

Teacher Profile Image

Ardit Sulce

Python Instructor, Founder of PythonHow

Profesor(a)

Hi, I am Ardit! I am a Python programmer, and a top Python instructor on Udemy having taught over 500,000 students through my courses. I have used Python together with companies from various countries, such as the Center for Conservation Geography, to map and understand Australian ecosystems, image processing with the Swiss in-Terra, and performing data mining to gain business insights with the Australian Rapid Intelligence.

Teaching is my passion and you will find that I love to explain everything using real-world examples.

Happy learning!

Ver perfil completo

Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Video de introducción: Hola, soy Ardit, un desarrollador e instructor Python con años de experiencia enseñando programación a más de experiencia enseñando programación a 500,000 estudiantes en todo el mundo También soy el fundador y autor en pythonhow.com, un He creado algunos de los cursos de Python más populares en línea, y en esta clase de Skillshare, te guiaré desde principiantes hasta habilidades avanzadas de Python construyendo proyectos del mundo real curso comienza con los fundamentos, por lo que no se necesita experiencia previa Cubriremos Python desde cero y a medida que avancemos, aplicaremos lo que aprendimos construyendo diez aplicaciones del mundo real. Obtendrá experiencia práctica con el análisis de datos usando Pandas, trabajando con conjuntos de datos esenciales con Python como JSO, SQL, CSV, incluso desarrollando aplicaciones web y aplicaciones de escritorio Incluso crearás una aplicación móvil usando la biblioteca Kev en Python Estas son aplicaciones del mundo real con datos reales y muchas características, ganarás experiencia real práctica, listo para aplicar estas habilidades para un trabajo como programador después. Entonces, ¿para quién es el curso? La clase es perfecta para principiantes que quieran aprender Python desde cero, así como para estudiantes intermedios que buscan construir proyectos prácticos. Por lo que no se requiere experiencia en codificación preer, solo una computadora y voluntad de aprender La mejor manera de aprender programación es haciendo, así que eso es exactamente en lo que nos enfocamos en esta clase. Cada proyecto que construyas reforzará tus habilidades y te dará algo tangible para mostrar. Entonces, si estás listo para aprender Python de una manera atractiva y práctica, comencemos. Te veré en la primera lección. 2. Introducción a los primeros pasos: Hola, bienvenidos a un nuevo video, y este es un video introductorio de la sección de funciones y condicionales. Entonces ahora estás entrando en una sección más avanzada de Python. Las funciones y condicionales son algunos conceptos básicos avanzados de Python, y estos son bloques muy fundamentales que puedes usar para hacer que tus programas sean más inteligentes y más manejables Entonces haces que tus programas sean más inteligentes haciéndolos tomar decisiones y que puedas implementar vía condicionales. Entonces, si tu programa obtiene algunas entradas y quieres pensar, quieres que tu programa piense si esa entrada está bien o no, y quieres hacer algo si esa entrada es verdadera y otra cosa si esa entrada es falsa. Entonces estás tomando decisiones en tu programa a través de un bloque condicional. Y entonces tienes funciones por otro lado, las funciones se utilizan para envolver en bloques de código, por lo que bloques similares de código. Te ayuda a organizar tu código. Entonces una función, por ejemplo, podría convertir USD a euros. Entonces esta función hace esto ciertas cosas y lo hace bien. Entonces obtiene USD como entrada, y te da euros como salida. Entonces dentro de la función, tienes esas operaciones matemáticas que hacen la conversión. Entonces las condiciones y funciones son dos cosas que vas a aprender esta sección a través de ejemplos, claro. Entonces te veré en el siguiente video. 3. Instalar Python y el IDE: Hola. En esta conferencia, te mostraré cómo instalar Python y el IDE de código de Visual Studio. Ahora, si tienes Python instalado y si ya tienes un IDE, puedes saltarte este video. Por lo que también puedes usar otros IDE. El código de Visual Studio es solo mi preferencia, y recomiendo usar el código de Visual Studio. Entonces, ¿dónde están las instrucciones? Bueno, si prefieres instrucciones basadas en texto, puedes descargar los archivos PDF de los recursos de la conferencia Si quieres instrucciones en video, los videos son más largos. Entonces, si tienes problemas con una versión de texto, tal vez, tal vez quieras descargar los videos después. Pero las versiones textuales deberían ser suficientes. Y las instrucciones son para usuarios de Windows, Mac y Linux. Entonces, dependiendo de su sistema operativo, es posible que desee seleccionar descargar los archivos que son para su propio sistema operativo. Así que gracias, y hablaré con usted en la próxima conferencia. 4. Instrucciones de instalación en Windows +: Hola, en esta parte, te voy a mostrar cómo instalar Python en Windows y también código tudo visual en Windows también Así que comencemos instalando Python. Simplemente busque Python en Google, y la primera página debería ser el sitio web oficial de Python, python.org En python.org, vaya a Descargas y vaya a Descargas y vaya a Por lo que actualmente, la versión actual es Python 3.10 0.3. En tu caso, podría ser Python 3.11 quizás. Entonces, sea lo que sea que veas ahí, solo descárgalo. Una cosa si estás en Windows siete o anterior, entonces deberías ir a este enlace lista vistosa de descargas y descargar Python 3.8 o anterior porque 3.10 no funcionará para Windows seven o versión anterior de Así que ahora voy a hacer click en Python 3.10 0.3. Este archivo ejecutable se descargará, entonces deberías instalar ese ejecutable esta ventana debería aparecer. Ahora bien, si ya tienes una instalación de Python, este botón de aquí dirá upgrade en lugar de install. Entonces, si ese es el caso, solo actualice. Si no tienes ningún Python en tu sistema, entonces deberías presionar en Instalar ahora, pero también deberías verificar esto en Python 3.10 a path Así que asegúrate de que esté marcado y ve a Instalar ahora o actualizar. Mi configuración fue exitosa, así que cerraré esta ventana e iré al botón de búsqueda de Windows y abriré Símpt del sistema. Así que busca Command Prompt o simplemente CMD y abre esta aplicación Ahora bien, esta es una interfaz de línea de comandos que te permite interactuar con tu sistema operativo Windows. Así que ahora vamos a asegurarnos de que Python se instaló correctamente. Para eso, quieres escribir P Y, espacio menos tres. Presiona Enter, y si esto aparece con estas tres flechas, eso significa que Python estaba instalado. Entonces, lo que estás viendo ahora es el shell interactivo de Python, también conocido como la consola Python. Así que aquí ahora, puedes escribir código Python. Por ejemplo, 3.4, presiona Enter y obtienes los resultados siete. Esto se conoce como una forma interactiva de programación. Para salir de esto, puede presionar salir con paréntesis, abrir y cerrar el paréntesis, presionar Enter y volver a la línea de comandos de Windows Ahora bien, si cerramos esta ventana, perderemos ese código que ahí escribimos, así que no guardamos el código. Eso fue simplemente una sesión interactiva donde solo escribes algunos códigos con fines de prueba y no quieres guardar el código. Si quieres guardar el código, entonces necesitas un IDE. Entonces eso es lo que vamos a hacer a continuación. Vamos a instalar un IDE. Así que ve a la búsqueda de Google para el código de Visual Studio. Pero si quieres usar otro IDE, por ejemplo, Pycharm, no dudes en usarlo. El código Python que escribiré en el código de Visual Studio será el mismo que escribirás por tu cuenta. IDE favorito. El IDE es solo una cuestión de preferencia. Así que sigamos adelante y hagamos clic en los primeros resultados. Código de Visual Studio. No confundas el código de Visual Studio con Visual Studio. Se trata de dos IDE diferentes. Código de Visual Studio, descarga para Windows y espera a que se descargue el archivo ejecutable. Entonces quieres hacer clic en el ejecutable para instalarlo. Así que solo repasa el proceso de instalación. Siguiente, siguiente. A continuación, prefiero comprobar estas opciones. Te da la opción de abrir archivos Python en código de Visual Studio haciendo clic derecho sobre tus archivos Python en tu Windows Exploder Después haga clic en Siguiente e Instalar. Mi instalación fue exitosa, así que voy a terminar esto, y ahora voy a abrir el código de Visual Studio. Entonces solo buscaré el código de Visual Studio, o si lo haces solo VSC, ese es el acrónimo que se usa para el código de Visual Studio, generalmente Entonces deberías abrir el código de Visual Studio. Ahí tienes algunas notas de lanzamiento. Si quieres leerlos, voy a cerrar ese cierre de esta ventana también. Y así ese es el código de Visual Studio. La configuración del código Python y Visual Studio fue exitosa en mi computadora. Tanto Python como Visual psudio code están funcionando bien. Ahora, en el siguiente video, te mostraré cómo usar los dos juntos, entonces cómo usar Python dentro del código de Visual Studio. Te lo diré en el siguiente video. 5. Instrucciones de instalación en Mac +: Hola. En este video, te mostraré cómo instalar Python y el IDE de código de Visual Studio en Mac. Vamos a empezar instalando Python. Entonces, si buscas Python en Google, los primeros resultados deberían señalarte a la página web oficial de Python. Y si vas a descargar y luego pasas a este botón, este debería descargar la última versión de Python. En mi caso, esto es 3.10 0.3. En tu caso, podría ser aún más reciente, por ejemplo, 3.11. Sea cual sea la versión aquí, solo tiene que pulsar el botón y se descargará el paquete de instalación. Después haga clic sobre el archivo para instalarlo. Ahora, si tienes instalada otra versión de Python en tu computadora, aún puedes instalar esta versión más reciente. Las dos versiones se comportarán como software independiente separado, y puedes usarlas ambas. Te voy a enseñar cómo hacer eso. Entonces presione continuar, continuar, continuar. De acuerdo. Instalar. Mi instalación de Python fue exitosa. Así que ahora para comprobar si Python estaba realmente, realmente instalado con éxito, puedo abrir el terminal. Entonces para eso, quieres usar foco para buscar terminal o Alfred. Si usas Alfred, entonces abre el programa terminal, y en el terminal, quieres escribir Python 3.10 o 0.11 si instalaste Python 3.11 Entonces dependiendo de lo que tuvieras aquí, quieres escribir esa versión. Así como sin espacios. Entonces 3.10 en mi caso, presiona Enter y esto debería aparecer. Entonces ven estas tres flechas aquí. Aquí puedes escribir códigos, por ejemplo, tres más cuatro, y obtienes la salida siete. Entonces eso se conoce como shell interactivo Python o la consola Python. Es una forma rápida de escribir código. Puedes salir del shell, el shell Python para volver a la terminal. Entonces ahí vamos. Y ahora estamos en la terminal. Si quieres usar otra versión de Python que hayas instalado, puedes usar Python 3.9, por ejemplo, si tuvieras instalado Python 3.9, y eso debería abrir esa otra versión de Python como ves aquí. De nuevo, se puede salir, volver a la terminal. Se puede cerrar esa ventana, y ahora también se pierde el código. Entonces no guardamos el código en ningún archivo. Podemos hacerlo usando un IDE, y eso es lo que vamos a hacer a continuación. Vamos a descargar e instalar el código de Visual Studio. El código de Visual Studio es un IDE. Ahora bien, el IDE es cuestión de preferencia. Entonces, si tienes una identificación favorita, por ejemplo, antes estabas usando Pycharm, no dudes en usar Pycharm porque el código que escribo en los videos será el mismo En mi caso, estaré usando código de Visual Studio. Entonces solo busca eso en Google, ve a los primeros resultados, y esto debería llevarte al código de Visual Studio. Ahora, no confundas el código de Visual Studio con Visual Studio. Se trata de dos IDE diferentes. El código de Visual Studio es el que estamos usando. Entonces presiona ese botón para descargar código de Visual Studio y esperar a que se descargue la instalación. Entonces eso me ha descargado un archivo Zip. El archivo zip fue extraído, y ahora tengo este archivo si hago doble clic en él y presiono en abrir. Eso abrirá el código de Visual Studio. Entonces ese es el código de Visual Studio. Tenga en cuenta que la aplicación se encuentra actualmente en mi carpeta de descargas. Por lo tanto, es posible que desee arrastrar ese archivo a la carpeta de aplicaciones. Puedes cerrar esa ventana de código de Visual Studio, y normalmente puedes abrirla usando Spotlight o si estás usando Alfred entonces puedes buscar Visual Studio Code, y lo ves en mi carpeta de aplicaciones ahora visualsudio code Ábrela y eso es otra vez, Visual Studio Code. En el siguiente video, te mostraré cómo usar Python dentro del código de Visual Studio para que podamos crear programas en archivos los cuales podamos guardar y reutilizar. Entonces te hablaré en el siguiente video. 6. Instrucciones de instalación en Linux +: Aquí se explica cómo instalar Python y el IDE de código de Visual Studio en computadoras Linux. Puedes instalar Python en Linux usando el terminal. Entonces busca terminal entre tus programas, terminal abierta, y primero, quieres hacer una actualización de la aplicación psudo Ingresa la contraseña tu Linux para sudo y presiona enter Una vez finalizada la actualización, entonces quieres hacer sudo app install Python three Y eso debería instalar Python en tu computadora. Y se instaló la última versión de Python disponible. Por eso me llegó aquí este mensaje que dice que Python tres ya es la versión de noticias, así que todo está bien. Ahora instalemos el IDE de código de Visual Studio. Así que abre tu navegador, ve al sitio web oficial de Visual Studio Code, que es code.visualstudio.com De lo contrario, busca en Google Visual Studio Code. Pero no confundas el código de Visual Studio con Visual Studio. Visual Studio y Visual Studio son dos IDEs diferentes, y el que estamos usando en el curso es el código de Visual Studio. Entonces entonces en el sitio web, vaya a la descarga de archivos profundos. Y espere hasta que se descargue el archivo, y luego haga doble clic en el archivo. El código de Visual Studio también está disponible para ser instalado como un paquete Snap, por lo que sería una alternativa de instalarlo. De lo contrario, puedes seguir mis instrucciones. Ingresa tus contraseñas de Linux y espera a que se complete la instalación. Una vez completada la instalación, puedes ir y buscar código de Visual Studio, así que s debería aparecer Visual Studio, que puedes abrir y debería verse así. Así fue como instalar código Python y Visual Studio en Linux. En el siguiente video, te mostraré cómo crear tu primer programa Python en código de Visual Studio. Gracias. 7. Crear y ejecutar un programa de Python: Hola, bienvenido de nuevo. En este video. Te mostraré cómo construir un programa Python y cómo ejecutar ese programa Python para que puedas obtener la salida. Obviamente, este programa será muy sencillo porque el enfoque aquí es mostrarte el proceso de crear un programa y ejecutarlo. Para construir un programa en Python, necesitas dos cosas. Uno es Python y el otro es un IDE o un editor de texto. Un IDE es solo un editor de texto avanzado. Entonces usaré el código visual de los cilios como IDE. Que es este de aquí, y luego voy a crear un proyecto aquí. Un proyecto no es más que simplemente crear un directorio vacío. Entonces primero, quieres ir a tu sistema de archivos, Windows Explorer o MacFinder y asegurarte de tener una carpeta vacía Primer proyecto es el nombre de este directorio vacío. En el Explorador de Windows, y luego quieres volver al código de Visual Studio. Si estás en otro IDE, el proceso es básicamente el mismo. Vas a archivo, y luego vas a OpenFoldero Hacer que se pueda escribir solo abierto. Así que haz clic en eso. Y luego quieres navegar hasta esa carpeta vacía, hacer doble clic en ella y luego seleccionar carpeta. Un código de Visual Studio, lo que hará es que abrirá esa carpeta como directorio raíz del proyecto. Tiene aquí esta advertencia, está bien decir, sí, confío en los autores. Se puede ver ahora ese primer proyecto, el nombre de una carpeta es el nombre del proyecto también. Entonces lo que voy a hacer ahora es escribir un programa, un programa Python. Y esto consiste en crear un archivo de texto donde escribas ese programa real. Para crear ese archivo de texto, puedes volver a ir a tu carpeta y crearlo aquí, o normalmente lo que hacemos es crear ese archivo desde dentro del IDE. Entonces, si haces clic aquí, entonces escribe un nombre para el archivo como el programa de subrayado M No se recomienda utilizar espacios en los nombres de los archivos. Así que por favor siempre use guiones bajos en lugar de espacio. Y luego, probemos TXT y veamos si esto va a funcionar. La extensión real es punto PY, pero eso no es un requisito. Por supuesto, usaremos punto PY, siempre, siempre. Pero por ahora, mantengámoslo en punto TXT para que entiendas un concepto muy crucial sobre Python. Entonces presionaré Enter, y aquí voy a hacer imprimir tres más cuatro, y ese es nuestro programa. Entonces este programa simplemente da salida a la suma de tres y cuatro. ¿Cómo puedo ejecutar este programa ahora para obtener los resultados? Bueno, ves aquí este elemento del menú de la terminal, presionas eso y vas a nueva terminal, y eso debería abrir una nueva terminal aquí. Entonces eso es como la línea de comandos donde interactúas con tu computadora. Y aquí ahora, podemos escribir Py menos tres si estás en Windows. Si estás en Mac, deberías escribir Python tres. Entonces estoy en Windows aquí, así que voy a usar Pi espacio menos tres, y luego mi programa de subrayado, en realidad, puedo usar la pestaña ahora Si presiono la pestaña, eso auto completará el nombre del archivo. Esta parte aquí no es necesaria los puntos y la barra diagonal Se puede dejar. Está bien. Pero aunque lo quites así, seguirá funcionando. Entonces ahora, si presionas Enter aquí, lo que obtenemos es que vamos a la siguiente línea. Quizás estabas esperando que la salida se mostrara aquí. No se presentó porque el archivo sigue vacío. No hemos guardado los cambios. Entonces después de escribir esta línea de código, no guardé nada. Entonces lo que quieres hacer es ir a File Save o controles luego presiona la tecla de flecha superior aquí para obtener ese comando previamente ejecutado y presionar Enter. Entonces obtenemos la salida siete. Entonces, como puedes ver, un programa Python no es más que un simple archivo de texto que escribes y luego lo ejecutas usando el comando Python. Pero hay una manera más agradable de ejecutar programas Python al menos en código de Visual Studio Y eso es mediante el uso de un botón Ejecutar. Actualmente, no hay ningún botón Ejecutar aquí porque necesitamos instalar una extensión de Python. Entonces, si vas a esto, ícono escucha extensiones. Y aquí quieres buscar Python, presiona Enter. Y este primer resultado es la extensión que queremos instalar. Así que presiona el botón Instalar. Y eso instalará la extensión Python. Pero, ¿qué es la extensión de Python? Bueno, ya te dije que esto mostrará el botón Ejecutar en algún lugar de aquí. No lo mostró porque mi archivo no tiene una extensión PY. Así que la extensión Python busca archivos PY. Entonces lo que quieres hacer es hacer clic derecho aquí, renombrar a punto PY. Y ahora vemos ese botón. También recibimos este mensaje de que necesitamos seleccionar un intérprete de Python. Entonces, para seleccionar un intérprete de Python, o presionas ese botón ahí o si no obtuviste esa ventana, lo que quieres hacer es ir a este icono de aquí, este corchete, y luego ir a seleccionar Intérprete. Y después se quiere seleccionar el intérprete Python 3.10 0.3, que instalamos en el video anterior Quizás en tu caso, es otra versión. Entonces, sea cual sea el intérprete de Python que esté usando, selecciónelo y luego estará listo para ejecutar este programa usando ese botón. Entonces presiona ese botón. Y esa es la salida siete aquí abajo. Entonces, como puedes ver, hay dos formas de ejecutar tus programas Python. O usas el comando Python como hicimos con PY menos tres, y luego mencionaste el nombre del archivo. O usas de la manera más fácil, que es mediante el uso de este botón. Pero a medida que cose, para poder usar ese botón, necesita nombrar sus archivos con punto PY al final. Y esa es en realidad la mejor práctica. Todo el mundo nombra sus archivos punto PY. Es como una convención. No es un requisito, pero es una convención del corazón. Y a medida que cose, cosas como extensiones, extensiones IDE también funcionarán mejor si tienes tus archivos nombrados con punto PY. La otra ventaja de usar este botón es que si tenías más códigos como cuatro más nueve, no tienes que guardar el código. Simplemente lo ejecutas y llegarás a los resultados siete y 13. Entonces la suma de esa línea y la suma de esa línea también. Si quieres crear otro programa, lo que quieres hacer es ir de nuevo a Archivo, abrir carpeta, y asegurarte de tener una carpeta vacía o simplemente crear una sobre la marcha aquí. Así carpeta, segundo proyecto. Haga doble clic en ella seleccione carpeta, y eso cerrará esa ventana actual del proyecto actual, y se abrirá el segundo proyecto. Entonces este de aquí, de nuevo, se crea un archivo. Myprogram punto py punto PY siempre, seleccione un intérprete usando este corchete y vaya allí Elija siempre el mismo intérprete que utilizó anteriormente a menos que desee seleccionar otro intérprete. Si tienes muchos intérpretes y escribes algún código, ejecútalo, y deberías ver la salida aquí en la línea de comandos Con eso, les agradezco por ver este video, y hablaré con ustedes en el siguiente. 8. ¿Qué es Python sorprendentemente?: Supongamos que estás caminando en la selva amazónica. En el bosque, te encuentras con una tribu y la tribu tiene un cocinero. Quieres decirle al cocinero que tienes hambre, así que necesitas comer. El problema es que no conoces el idioma. Entonces lo que quieres, lo que obtienes es un intérprete. Entonces ese es el intérprete. Usted habla inglés al intérprete, y el intérprete habla amazonis al cocinero Y el cocinero te sirve. La comida. Python funciona igual. Este eres tú otra vez, y quieres comunicarte con el procesador de tu computadora. Por ejemplo, quieres saber la suma de tres y cuatro. El problema, de nuevo, es que el procesador habla un lenguaje muy difícil llamado lenguaje máquina. Y este lenguaje es muy difícil para los humanos de hablar o de escribir. Entonces lo que obtenemos es un intérprete llamado C Python. Entonces, ¿qué es C Python? C Python es el software que instalamos en los videos anteriores. Entonces, cuando descargas Python de python.org y lo instalas, lo que estás instalando es en realidad Es un intérprete. Este intérprete obtiene el lenguaje Python de usted, y traduce ese lenguaje a lenguaje máquina, y habla ese lenguaje de máquina al procesador. A cambio, el procesador utiliza la pantalla de la computadora por lo que la pantalla de su computadora portátil para mostrar los resultados, por ejemplo, siete, y ve ese siete. Entonces, como puedes ver, Python es igual que el inglés. Es sólo un idioma. El software que instalas y usas para ejecutar Python es solo un software, y está escrito en lenguaje sello. Sucede que está escrito en lenguaje de foca. Por eso se llama C Python, aunque la mayoría de la gente se refiere a él como simplemente Python. Cuando dices, ¿ instalaste Python? Sí. Bueno, estás hablando de instalar C Python. El lenguaje Python en sí es solo conocimiento. Se almacena en documentación. Si vas a python.org y luego vas al menú de documentación, entonces deberías ver la documentación Por lo que la documentación de Python es equivalente a un diccionario, un diccionario de inglés, como el diccionario Oxford, donde se documenta el idioma inglés. Sin embargo, hay una diferencia. En el caso en el que hablamos con el cocinero, utilizamos el lenguaje hablado. Para comunicarnos con el intérprete aquí, utilizamos archivos de texto. Entonces escribimos el idioma en un archivo de texto, y el intérprete lee ese archivo de texto. Por supuesto, le damos la extensión punto PY a estos archivos de texto, pero siguen siendo archivos de texto. La extensión es diferente. Y esa es la idea. Eso es lo que es Python. Entonces Python es el lenguaje. Y gracias por seguir este ejemplo, esta comparación, y te hablaré en el siguiente video. 9. Introducción a los conceptos básicos de Python: Hola, bienvenidos a un nuevo video, y este es un video introductorio de la sección de funciones y condicionales. Entonces ahora estás entrando en una sección más avanzada de Python. Las funciones y condicionales son algunos conceptos básicos avanzados de Python, y estos son bloques muy fundamentales que puedes usar para hacer que tus programas sean más inteligentes y más manejables Entonces haces que tus programas sean más inteligentes haciéndolos tomar decisiones y que puedas implementar vía condicionales. Entonces, si tu programa obtiene algunas entradas y quieres pensar, quieres que tu programa piense si esa entrada está bien o no, y quieres hacer algo si esa entrada es verdadera y otra cosa si esa entrada es falsa. Entonces estás tomando decisiones en tu programa a través de un bloque condicional. Y entonces tienes funciones por otro lado, las funciones se utilizan para envolver en bloques de código, por lo que bloques similares de código. Te ayuda a organizar tu código. Entonces una función, por ejemplo, podría convertir USD a euros. Entonces esta función hace esto ciertas cosas y lo hace bien. Entonces obtiene USD como entrada, y te da euros como salida. Entonces dentro de la función, tienes esas operaciones matemáticas que hacen la conversión. Entonces las condiciones y funciones son dos cosas que vas a aprender esta sección a través de ejemplos, claro. Entonces te veré en el siguiente video. 10. Variables: por qué y cómo usar las variables +: Hola, bienvenido de nuevo. Por favor, eche un vistazo a este programa aquí. ¿Ves algún problema con este programa? Bueno el programa funciona bien. Si lo ejecutamos, obtenemos siete como salida, que es la salida esperada. Entonces tres más cuatro te da siete. Pero hay un problema con el programa, y el tema es que no tenemos idea de lo que significa tres y lo que significa cuatro. Entonces, como programadores, no sabemos lo que está pasando aquí, y eso hace que este programa no sea legible Ahora, déjame mostrarte cómo solucionaré ese problema de inmediato mediante el uso de variables. Entonces voy a borrar esto por completo y decir, gastado es igual a tres. Donado es igual a cuatro. El monto total es igual a gastar más donarlo, y luego imprimir el monto total. Si ejecuto este programa ahora, obtendré la misma salida, así que vuelve a ser siete. Pero esta vez, nosotros como programadores podemos entender este programa Entonces podemos darle este programa a algunas otras personas, algunos otros programadores, o podemos volver a este programa Posteriormente y todavía podemos entender este programa porque ahora tenemos nombres para los valores, y estos son referidos como variables. Así que los montos gastados, donados y totales son todas variables. La sintaxis es bastante simple. Entonces todo lo que tienes que hacer es escoger un nombre de tu mente para una variable. Así que elegí haber gastado como la primera variable. Entonces esta es la cantidad de dinero que gasté en comprar cosas, por ejemplo, y luego esta es la cantidad que doné. Y luego calculé la cantidad total. Entonces ahora este programa tiene más sentido. Y claro, hay otros ejemplos como artículos iguales a diez y precio igual a dos en total. El precio es igual a los artículos veces precio. Entonces ahora hay este asterisco aquí, lo que significa operador de multiplicación. Imprime el precio total, y obtenemos 20 como salida aquí. Entonces nuevamente, tenemos una variable aquí, dos y tres. Ahora bien, hay algunas reglas respecto a la sintaxis de las variables. La primera regla es que no debes tener números delante de tus variables, sino que puedes tener números en el medio en alguna parte o al final, pero no delante de ellas. Puedes usar guiones bajos, como lo hice aquí, pero no puedes usar espacios Entonces esto no funcionará en Python, lo que significa que si tienes variables con más de una palabra, debes usar un guión bajo Es la mejor práctica usar un guión bajo. Y por último, puedes tener tantos espacios como quieras alrededor del operador de asignación. Entonces eso va a funcionar. Pero se recomienda, según la guía oficial de estilo Python, se recomienda tener un espacio a ambos lados del operador de asignación para que los códigos sean más legibles. Los espacios sirven solo para fines de legibilidad aquí. Lo mismo ocurre con estos operadores. Es bueno tener espacios alrededor del operador. Por legibilidad otra vez. Entonces ahora nuestro programa tiene más sentido. Sabemos lo que está pasando aquí. Entendemos el código, y ese es un beneficio de las variables. También hay un segundo beneficio. Las variables sirven como buckets para transportar datos u objetos. Entonces diez es un valor de datos, o también puedes referirte a él como un objeto. Entonces diez es un objeto, dos es un objeto, y items es el nombre de este objeto, o se puede decir la variable de este objeto. Y así estos nombres, estas variables son como cubos. Se utilizan para llevar objetos alrededor. Por ejemplo, digamos que colocamos diez dentro del cubo de artículos, y luego obtenemos ese cubo y multiplicamos ese cubo con un cubo de precio, que tiene dos adentro. Entonces, en lugar de escribir diez aquí y dos, realidad trabajamos sobre una base de cubo, sobre una base variable. Hay un beneficio para esto porque, por ejemplo, digamos que decidimos cambiar el valor de esto a tres, y eso significa que los ítems ahora aquí también serán tres. Entonces tres veces dos, vamos a conseguir seis. Por eso no queremos tener objetos codigos duros por ejemplo Si esto fuera diez, ejecutamos esto, obtendríamos la vieja salida 20. Entonces espero que quede claro. Siempre use variables, y eso concluye esta conferencia sobre variables. Entré en muchos detalles porque las variables se usan en cada programa que escribes. Así que asegúrate de entenderlos. Si no, haz preguntas en las preguntas y respuestas, y te hablaré en el siguiente video Gracias. 11. Cómo usar el shell interactivo de Python: Hola, bienvenidos de nuevo a una nueva conferencia. Anteriormente, escribimos este script, y podemos ejecutarlo usando este botón triangular, y obtenemos seis como salida. Entonces tres veces dos nos da seis. Entonces lo que hicimos aquí es que escribimos el guión en un archivo punto PY, y luego enviamos ese guión al intérprete. Por lo que enviamos todo el archivo punto PY al intérprete. Pero hay otra manera de ejecutar el código Python. Eso es por tener el intérprete bajo demanda. Déjenme demostrar lo que quiero decir con eso. Entonces hay que ir a la terminal a la línea de comandos. Aquí es donde se ejecutan los comandos del sistema operativo. Entonces estoy en Windows, así puedo ejecutar el espacio PY menos tres. Si estás en Mac o Linux, tendrás que escribir Python 3.10 o Python 3.9 dependiendo de qué versión de Python estés usando Estaré usando el espacio Pi menos tres y presionaré Enter. Entonces ese comando inicia el intérprete de Python. Ahora bien, el intérprete, como dije, está bajo demanda, lo que significa que el intérprete ahora está esperando que el código Python lo interprete. Entonces piensa en los métodos anteriores como contratar al intérprete por contrato. Entonces le envías al intérprete todo el guión, y ellos te devuelven la salida. Pero aquí, el intérprete es un empleado, digamos, están en el lugar y están esperando tu aporte. Ellos te están escuchando. Entonces lo que haces es decir que los ítems son iguales a tres, por ejemplo, escribes código y tu presentador y el intérprete te está escuchando Por lo que registra la variable items en la memoria. Y puedes seguir escribiendo código. El precio es igual a dos, el precio total es igual a los artículos veces el precio. Y si imprimes el precio total, obtienes la salida seis, que es la misma salida que esa. Ahora probablemente te estés preguntando cuándo usar de una manera y cuándo usar la otra. Entonces, ¿deberías codificar en un archivo Python o deberías codificar en el shell interactivo de Python? Entonces esto ahora se conoce como un shell interactivo. Entonces déjame responderte esa pregunta. Pero antes de responderte, quiero señalar las diferencias entre las dos formas de codificación. La mayor diferencia es que el código escribes en el shell interactivo no se guarda. Entonces, si salgo de este shell ahora, este código se perderá, y no hay forma de guardarlo. Y eso nos lleva al otro punto, que es que esta forma de codificar es sólo para código descartables. Entonces, si quieres simplemente probar las cosas rápidamente, tal vez quieras hacer algunas operaciones matemáticas como suma, multiplicación, etcétera Y no te interesa crear un programa reutilizable, entonces este shell interactivo está bien. Es más rápido que tener que crear un archivo PY y luego escribir el código allí. Entonces creo que he respondido a la pregunta. Debe usar el archivo punto PY siempre que desee crear programas reutilizables. Y usas el shell interactivo Python para una línea rápida. Así que solo escribe una línea, tal vez otra aquí. Entonces operaciones matemáticas. Ahora, quiero señalar una diferencia entre los dos. Ahora, otra diferencia que debes tener en cuenta es que en el shell interactivo de Python, no necesitas usar una función de impresión. Sólo se puede decir precio total. Y se obtiene la salida. No es necesario imprimir el precio total. No obstante, en un archivo punto PY, hay que ser muy explícito. Entonces, si elimino la función print y ejecuto este programa, no obtendremos ninguna salida. Entonces déjame ejecutar este programa ahora, pero te advierto que vamos a obtener un error. Así que ejecuta el programa, este es el error. Entonces, ¿qué pasó aquí? Este código está bien, pero lo que sucede es que el código de Visual Studio está ejecutando este comando de Windows dentro del Python Shell, el Python Shell solo acepta código Python, pero no los comandos del sistema operativo Windows o Mac. Entonces este es un comando de Windows porque está iniciando está tratando de iniciar el programa Python, y está tratando de ejecutar ese archivo PY punto de mi programa. Entonces, lo que necesitas hacer es salir del shell cada vez que quieras ejecutar un archivo PY de punto. Entonces, si estás en un shell interactivo de Python, y sabes que estás siempre que veas estas tres flechas, entonces quieres hacer salir con paréntesis y presionar Enter, y eso te llevará de vuelta al shell del sistema operativo, al terminal, a la línea de comandos Eso significa que ahora puedes ejecutar tu programa. Entonces déjame presionar ese botón triangular, y no obtuvimos ningún error. obstante, tampoco hay salida, como pueden ver, porque como señalé antes, aquí no estamos imprimiendo nada. Entonces, lo que hace el intérprete es que solo asigna 32 ítems variables Hace lo mismo con el precio. Calcula el precio total, y luego aquí no hace nada. Entonces para obtener salida, necesitamos decir imprimir la variable run otra vez y obtienes seis. Si quieres volver de nuevo al shell de Python, escribe el comando Py menos tres, y vuelves al shell, y puedes volver a ejecutar código aquí. Entonces volveré al shell y eso es sobre el shell interactivo de Python. Gracias por seguir. 12. Uso del terminal: Antes de entrar en la codificación, quiero mostrarte un consejo de productividad con respecto al IDE. Ahora bien, este consejo trata sobre el IDE de código sudo visual, pero probablemente también se aplicará a otros IDE Se trata del terminal, cómo usar el terminal de manera más eficiente, y esto te ayudará con codificación y también con la parte de aprendizaje. Entonces esto es lo que quiero mostrarles. Tengo mi terminal abierta aquí. Entonces, antes que nada, lo que quiero hacer es que quiero borrar todos los terminales usando ese icono o el icono podría estar en algún lugar de aquí. Así que simplemente borra todo. Sí, el icono nos muestra aquí ahora, presiona eso o el otro hasta que desaparezca la terminal. Y luego quieres volver a mostrar la terminal, y puedes hacerlo pulsando este botón. Entonces eso ejecutará el código. Se creará una nueva ventana de terminal. Y entonces es bueno tener un shell Python abierto en el lateral también. Entonces tienes tanto la línea de comandos donde ejecutas el código, también el shell interactivo de Python donde puedes escribir líneas rápidas. Entonces para hacer eso, quieres presionar este ícono. Y eso partirá la terminal. Entonces ahora tenemos una terminal aquí a la izquierda y una terminal aquí a la derecha. Aquí a la derecha, lo que queremos hacer es ejecutar el comando Python que abre el shell interactivo de Python. En Windows, eso es el espacio PY menos tres, o Macan Linux, eso sería Python 3.10 o Python 3.11, y así sucesivamente Así que eso abrirá el Shell interactivo Python. Ahora tenemos tanto la línea de comandos donde ejecutamos los archivos punto PI como el Python Shell, donde se ejecuta el código de forma interactiva Eso te ayudará con tu aprendizaje. Entonces déjame demostrarte rápidamente si esto está funcionando bien o no, para que pueda tener el foco aquí. No importa, y presiono ese botón, pero el código será enviado a esa terminal. Y esta terminal aquí es independiente de eso. Entonces nuevamente, si esto no está funcionando, asegúrate de nuevo de eliminar todo. Entonces no hay terminales. Entonces no abras una terminal aquí. Entonces, en lugar de hacer eso, que se abra el terminal usando ese botón. De esa manera te aseguras de que esta terminal esté conectada al proceso en ejecución de este archivo, y luego divides la terminal, y luego tienes esos comandos para abrir Python. Otro consejo antes de cerrar este video en la línea de comandos donde se envían los comandos de Windows o Mac o Linux. Entonces aquí, cuando ejecutamos el archivo punto PY, puedes borrar el terminal usando CLC, escribir CLC Si estás en Windows, en Mac sería claro o Linux también. CLC presiona Enter y eso despejará el terminal. Entonces esto funciona en la línea de comandos, no en el shell Python. En cuanto a la ventana dividida aquí en el lateral, se puede ver cuántas sartenes terminales tiene. Entonces tenemos esto, que está apuntando a esto en el lado, en el lado izquierdo, y luego el otro a la derecha. Además solo trata de no tener más de dos terminales aquí porque las cosas pueden llegar confusas porque si presionas ese ícono más, vas a tener una tercera terminal que va a estar oculta detrás de estas dos y las cosas se volverán confusas. Asegúrate de tener siempre dos. Si tienes más, borra todo y vuelve a comenzar el proceso a su alrededor, alrededor de PY, menos tres nuevamente, y así sucesivamente. Entonces con eso, estás listo para programar en los próximos videos, y esto realmente, realmente te ayudará con tu aprendizaje. Entonces te hablaré en el siguiente video. 13. Tipos simples: enteros, cadenas y flotadores: Déjame demostrarte algo. Voy a crear la variable X. Almacenar diez en esa variable X, Y, almacenar el texto diez en esa variable, y luego crear dos nuevas variables. Entonces uno equivale a dos. X más X, y unos dos es igual a dos, Y más Y. Y luego imprimir algunos uno y algunos dos. Guarda el guión, no lo olvides y ejecútelo. Esta es la salida. Entonces sacamos 20 de X más X y 1010 de Y más Y. ¿Cuál es mi punto aquí? Mi punto es que las computadoras son volcadas. Para que te entiendan, tienes que ser muy claro, muy explícito en lo que vas a decir a través de tu lenguaje, a través de Python en este caso. No basta con decir sólo diez hay que declarar lo que es ese diez. ¿Es un número o es texto? Es por eso que en algunos idiomas, en la mayoría de los idiomas, tenemos declaraciones de tipo. Entonces, en otros idiomas, dirías algo como int, que significa integer. Entonces estás diciendo que esto es un entero. Diez es un entero, y esto sería como STR Y sin comillas. Entonces eso le dice a Python que esto es en realidad un texto y debe tratarse así. Entonces, cuando Python, cuando aplique un operador plus, Python concatenará ese texto, por lo que agregará diez después de diez, y hará esta cadena concatenada Ahora bien, así no es como funciona en Python. En Python, en lugar de hacer estas declaraciones explícitas, tenemos declaración implícita en su lugar, que es esta de aquí Entonces cuando el número está sin comillas, es un entero. Bueno, también puede ser un flotador, pero déjenme hablar de eso en unos segundos. Y si es con comillas dobles, significa que es un texto. Si es igual a 10.1, por ejemplo, eso significa que es un flotador. Y si no me crees, puedes usar la función type como esa X, tipo Y y type. La función type imprimirá el tipo de cada valor. Entonces es una clase int, una clase STR, que significa cadenas. Todo entre comillas es una cuerda y flotadores, que significa flotador Con cadenas, también puedes usar comillas simples como esa. Guárdala, y vas a obtener la misma salida. Entonces, si tu intención es procesar texto, necesitas usar cotizaciones. Si tu intención es procesar números, así que para poder hacer cálculos matemáticos con ellos, necesitas usarlos sin des así o así. 14. Tipos de datos de lista: Ahora conoces tres tipos de datos en Python, sabes enteros, sabes cadenas, y sabes y sabes Estos son tipos de datos simples. También tenemos lo que se conoce como tipos de datos compuestos, tipos que están hechos de diferentes objetos Y la lista es la más popular. Entonces, en una lista, en realidad puedes almacenar múltiples objetos. Supongamos que eres profesor y quieres calcular la nota promedio de tus alumnos. Entonces usas Python para eso, y necesitas una estructura de datos para almacenar esos valores en Python. Necesitas el tipo adecuado en Python para representar las calificaciones de tus alumnos, y la lista sería una buena opción. Vamos a crear una lista. Almacénelo en una variable como de costumbre. Grados de los alumnos. Igual a corchetes abiertos, cerrar corchetes. Entonces los objetos ahora entrarán dentro de esta sintaxis. Entonces viste que con enteros, usarías un número sin comillas para cadenas para decirle a Python que eso es una cadena, usas comillas dobles o simples Y con listas, usas estos corchetes, así que cada tipo tiene su propia sintaxis. Entonces digamos 9.1 y 8.8 y 7.5. Esas son las calificaciones de tu alumno. 15. Uso de rangos: En este video, te familiarizarás más con las listas. Así que anteriormente, almacenamos tres tipos de datos flotantes en una lista, pero se puede almacenar cualquier tipo de objeto, no sólo flotadores, así podemos almacenar un entero como nueve Se puede almacenar una cadena, como hola. Incluso puedes almacenar listas dentro de una lista. Simplemente escribe corchetes y luego ingresa los ítems de esa lista. Así que aún, esta lista tiene tres elementos este entero, esta cadena, y esta lista. Y por supuesto, puedes imprimir esa lista apuntando a la variable asociada a la lista. Y esa es la salida que obtenemos. No, operaciones matemáticas con listas, ¿qué admite la lista? Bueno, no mucho, de verdad. Se pueden hacer multiplicaciones con un entero, como dos o tres, y veamos qué va a pasar Voy a imprimir esa expresión directamente aquí en vez de poner eso en una variable. Entonces, lo que prefieras, puedes crear una nueva variable, almacenarla en la variable, y luego colocar la variable en la función print o colocar directamente esta expresión en la función print. Ambos funcionarán. Entonces, si ejecutas eso, vas a obtener esta salida. Entonces esa es la misma lista repetida tres veces. Si esto era más, esto no es compatible porque Python no sabe qué hacer con una lista y un entero. Entonces te da un error de tipo error solo puede concatenar listas a listas Por lo que puede concatenar listas a listas. Entonces, si haces las calificaciones de los estudiantes, más las calificaciones de los estudiantes, eso también funcionará. Así que ejecuta eso y obtienes estos resultados. La lista se repitió dos veces, que es el equivalente a esa veces dos. Entonces nuevamente, vamos a obtener los mismos resultados aquí y allá. Por último, también hay una manera de generar auto listas de enteros que tienen un cierto orden Digamos que quieres tener una lista 1-10, uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez. ¿Cómo podemos hacer eso? Bueno, claro, una forma es anotar eso, pero hay una mejor manera, y es usar un rango. Range es otro tipo de objeto, igual que tenemos listas, enteros. También tenemos gamas. Entonces rango cero y 11, y vamos a ejecutar las calificaciones de los estudiantes para ver lo que esta variable tiene ahora como valor. Así que ejecuta eso, y este es un objeto range. Así que aún no hay mucho que ver. Pero si conviertes esto en una lista y vuelves a ejecutar. Por último, vamos a obtener esa salida. Entonces cero, uno, dos, tres, cuatro, cinco, seis, siete, ocho, nueve, diez. Entonces ahora las calificaciones de los estudiantes es un objeto de lista. Y esta palabra clave lista aquí es una clase. Entonces representa el último tipo de datos, y se usa aquí para convertir un tipo de datos de rango en un tipo de datos ist porque un rango se muestra simplemente así. Por lo que esto no es muy beneficioso para ver que la salida no es tan clara, por lo que la convertimos en un tipo de datos mínimo. Y entonces, ¿cómo funciona? Bueno, empieza desde cero hasta el número anterior a este número, que es diez, así que de cero a diez. Por eso tenemos de cero a diez. Por supuesto, aquí puedes tener cualquier cosa. Entonces uno a ocho, tendría que escribir nueve para conseguir uno a ocho. Entonces por lo menos uno a ocho. También puedes tener otro argumento aquí, dos, y veamos qué cambia eso en la salida. Entonces obtenemos estos resultados. Ese dos es el paso. Entonces uno, tres, cinco, siete, significa que comienzas de uno, y luego te mueves por un paso de dos. Entonces uno más dos, tienes tres, tres más dos, tienes cinco, cinco más dos, tienes siete, siete más dos, tienes nueve, pero nueve no está incluido en el rango. El rango es de hasta ocho, por lo que la lista terminará en siete. Por supuesto, puedes tener cualquier paso aquí, como tres, y obtendrás resultados diferentes. Entonces esa fue alguna información más avanzada sobre listas y también rangos. Con eso, te agradezco y te platicaré en el siguiente video. Nos vemos. 16. Cuáles son los atributos de los tipos de datos: Bien, entonces ya sabes cadenas, ya sabes, flotadores, ya sabes, enteros, ya sabes, listas Bien, ya sabes, tipos de datos. Pero, ¿cómo puedes realmente hacer algo en Python? ¿Qué puedes hacer con estos tipos de datos? Bueno, para responder a tu pregunta, deberías mirar el comando de los venados. Bueno, déjame ahora empezar a usar el shell Python un poco más para hacer las cosas más rápido. Entonces voy a dividir esto en dos. Esto es para ejecutar el archivo Python, esto es para el Shell Python interactivo. Entonces, ¿qué podemos hacer con la lista? Puedes averiguarlo haciendo Deer. Dear es una función en Python que te dará todas las cosas que puedes hacer con un tipo específico. Entonces con una lista, en este caso, todos estos aquí son atributos de lista. Puedes hacer lo mismo para verificar int. Puedes hacer lo mismo para verificar float, querido float, querido STR, por ejemplo, paremos en SDR antes de ir a la lista Con cadenas, puedes hacer, por ejemplo, puedes convertirlas en mayúsculas usando estos métodos Para saber qué hace upper, quieres usar help STR, ese es el tipo que tiene el atributo upper. Ahora bien, los atributos son todos estos y pueden ser métodos o propiedades. Eso no lo sabes hasta que compruebes con ayuda. Entonces esa es una documentación de ayuda para el método superior. Es un método, como puedes ver aquí, Q para salir y volver al caparazón. Entonces sigamos adelante y usemos eso. Hola, ese superior. Se utiliza un método con corchetes redondos con paréntesis. Y eso devolverá la versión en mayúscula de hola Si usamos Título en su lugar eso pondrá en mayúscula solo la primera letra Por supuesto, puedes usar variables. Y obtienes la misma salida. Ahora bien, ¿qué tenemos para las listas? ¿Qué tal calcular el promedio de las calificaciones de los estudiantes? Hagámoslo en el siguiente video. 17. Cómo averiguar qué código necesitas: Para calcular el promedio de estas calificaciones, queremos ver si un tipo de lista tiene algún tipo de método medio o promedio que nos permita obtener el promedio de sus valores. Para eso, vamos a consultar con lista de venados. Lista es el nombre que representa todas las listas. Entonces ese es un tipo, y esta es una instancia de ese tipo de tipo de lista . Queridos lista. Y echemos un vistazo rápido aquí. ¿Tienes un método medio o promedio? No lo creo. Entonces no existe ningún método del tipo de lista que nos permita calcular el promedio de los valores de lista. Sin embargo, eso no significa que no exista un método medio en Python para hacer eso. hombre o el promedio no es un método, sino que puede ser una función. ¿Recuerdas la función de impresión? Así que imprime así, ya ves que la impresión no necesita la notación de puntos para ser utilizada. Como por ejemplo, el método superior sí necesitaba una notación de puntos porque upper es un método, unido al tipo halo. Y la impresión es una función. Es una función independiente que funciona con muchos tipos, no solo cadenas, no solo enteros, flotadores Puedes imprimir cualquier cosa con impresión. Por eso no está apegado a un tipo específico. Entonces, ¿dónde vemos una lista completa de funciones que podemos usar? Se puede hacer eso usando el nuevo, subrayado, subrayado, incorporado ins, subrayado, subrayado, paréntesis cerrado Y esa es una lista completa de lo que puedes usar funciones integradas. Entonces déjame ver por una función media o una función promedio. No, no está ahí, pero hay una función de suma. Entonces lo que podemos hacer es, digamos mi suma, no usar sum como nombre de variable porque se puede ver que sum es una palabra clave reservada. Así sumar las calificaciones de los estudiantes, eso nos dará la suma de estos tres números. Entonces quiero contar cuántos artículos hay en esa lista. Entonces, ¿tenemos un conteo algo ahí? Quizá no. Bueno, sé que no hay método de conteo. Pero tenemos esta len, lo que significa que puedes comprobar lo que significa. Así que devuelva el número de artículos en un contenedor. Por lo que una lista también se conoce como contenedor. Digamos longitud, igual a longitud, calificaciones de los estudiantes. Entonces finalmente, podemos obtener la media, que es mi suma dividida por longitud e imprimir la media, salvo que ese es el valor medio de todos esos tres números. 18. Tipos de datos de diccionario: Entonces eres profesor y querías calcular las calificaciones promedio de tus alumnos, y eso lo hicimos usando este algoritmo aquí y esta estructura de datos para almacenar las calificaciones. El problema aquí es que no sabes qué grado es de quién. Entonces, si bien una lista es una buena estructura de datos para almacenar una matriz de elementos, no es lo suficientemente buena cuando estos elementos tienen algún tipo de identidad adjunta a ellos. En ese caso, quieres usar un diccionario. Digamos grado de estudiante, llaves. Esa es una sintaxis para un diccionario. Y luego usas los nombres de tus alumnos. Digamos María una columna, haz algo de espacio o ningún espacio , donde prefieras, pero es bueno tener ahí un espacio para hacerlo más legible Y luego escribes la calificación de María. Digamos S 8.8 y columna John, 7.5. La diferencia entre el diccionario y la lista son los corchetes, diferentes corchetes. Y entonces esto se considera un ítem en un diccionario. Esto se considera un ítem en una lista. Por lo que los artículos en un diccionario están hechos de claves. Esta es una clave y valores, esto es un valor. Una lista sería más apropiada si tuviéramos que almacenar, por ejemplo, una matriz de valores de temperatura. Digamos que, el lunes, tenía estas temperaturas temperaturas del lunes. Y por último, ¿cómo calculamos el promedio cuando tenemos un diccionario? Ya que estos son pares de claves y valores, no se puede simplemente hacer la suma así. Es necesario especificar la suma de lo que desea obtener. Así que los alumnos califican. Y si revisas su dict para diccionario, verás que los diccionarios tienen estos valores, que es un método. Dict los valores es un método, y proporciona una vista de los valores del diccionario. En palabras simples, te da los valores de un diccionario. Entonces, si obtienes este diccionario, haz cola para salir aquí, pégalo aquí y mira la calificación del estudiante que valora. Eso te dará este tipo de datos. Sigue siendo un tipo de datos. Sí parece una lista. No es exactamente una lista, pero se comporta como una lista con estos tres valores ahí Es un tipo de valores dict. Ese método produce este tipo. Por lo tanto, puedes agregar eso ahí dentro, no olvides el paréntesis, no olvides guardar y no olvides ejecutar para obtener la salida y este es el valor promedio de los valores del diccionario Para obtener las claves del diccionario, basta con hacer claves. Y obtienes este tipo de llaves fallecidas con las claves del diccionario como elementos de esa matriz de llaves fallecidas. 19. Qué hace que un programador sea un programador: ¿Qué hace que un programador sea programador? Es decir, ¿cuáles son las cosas que necesitas saber para poder programar cualquier aplicación informática? Esto es lo que les voy a decir en este video. Hay tres cosas que debes saber para programar, para codificar cualquier programa. Y lo primero es que necesitas conocer la sintaxis. Por ejemplo, necesitas saber que para poder imprimir algunas salidas, necesitas usar impresiones seguidas de paréntesis, y luego poner la entrada dentro de esos paréntesis Entonces eso es parte de una sintaxis, saber si se quiere usar paréntesis o comas, etcétera . Eso es lo primero. Lo siguiente es, digamos que estamos construyendo un programa que calcula el promedio a partir de una serie de valores. Entonces quieres saber qué tipo de datos necesitas usar para representar estos datos. Entonces, por ejemplo, si tienes un dato como nombres de alumnos seguido de la calificación de cada alumno, entonces sabes que necesitas usar un diccionario porque un diccionario está hecho de claves y valores. Entonces la estructura de datos correcta aquí sería un diccionario. Pero si solo tuvieras valores sin nombres de alumnos, entonces pensarías en una lista porque una lista es solo una serie de ítems, valores sin claves. Entonces estructuras de datos, necesitas conocer estructuras de datos y necesitas conocer la sintaxis. Estas son dos cosas. La tercera cosa es que necesitas conocer el algoritmo que necesitas usar para producir la salida esperada. Entonces en este caso, debes conocer los métodos que puedes usar o debes saber cómo crear estos métodos si no existen. Entonces en nuestro ejemplo, necesitas saber cómo crear este método promedio. Entonces estas son las tres cosas que debes saber para hacer cualquier programa. Estos son los fundamentos. Entonces espero que esto deje más claro el camino a la programación, y hablaré con ustedes en los próximos videos. Nos vemos. 20. Tipos de datos de tuple: Este de aquí es una lista. Y ahora es un derrumbe. Entonces una tupla es como una lista, pero con paréntesis, no corchetes Si lo imprimes, claro, obtendrías la misma representación que aquí. Entonces 14, cinco, 145. Sin embargo, los corchetes y el paréntesis no es la única diferencia entre listas y tuplas De hecho, esto es solo una diferencia en la sintaxis. La verdadera diferencia que hay es que las tuplas, como esta de aquí son inmutables y listas como esta Lo que eso significa es que a las temperaturas del último lunes, dos, se pueden agregar más elementos a la lista usando, por ejemplo, los métodos append Entonces, si revisas las temperaturas del lunes hasta ahora, obtendrás una lista mutada. Esta mutabilidad hace que sea muy dinámica. Verás más adelante cómo cuando hacemos estas operaciones por lotes y cada operación, estamos agregando elementos a la lista a medida que generamos esos elementos, esos valores con algunas funciones. Pero no es así con las tuplas. Si intentas agregar una tupla, obtendrás un error porque una tupla en realidad no tiene un método append Asimismo, no tiene un método remove como lo hace la lista. Entonces cuatro ya no está ahí. Las tuplas, sin embargo, tienen la ventaja que son un poco más rápidas que las listas, pero deberías pensar qué usar Entonces ya sea para usar List o topples, deberías pensar si la matriz que estás creando va a ser cambiada durante el transcurso del programa o no Entonces por ahora, no voy a profundizar en los topples y lo es. Pero cuando creamos estas diez aplicaciones durante el curso, comprenderás las principales diferencias entre las dos al ver cómo funcionan en programas reales. 21. Uso de tipos de datos en el mundo real +: Bien, entonces ahora conoces algunos de los tipos de datos de Python más importantes, pero apuesto a que todavía estás confundido de cómo usan estos tipos de datos en el mundo real Normalmente, por ejemplo, normalmente tendrías estos datos almacenados en un archivo Excel o un archivo de texto. Entonces, ¿ tiene sentido escribirlos en un diccionario Python así o así? ¿Lista? No, no lo hace. En realidad, hay formas de cargar automáticamente los datos de su hoja de cálculo de Excel a Python para crear ese diccionario Aún tienes que crear el diccionario, pero no tienes que escribir los datos en el archivo python dot py como hice aquí. Vas a usar algunas extensiones específicas de Python para cargar los datos aquí. Entonces procesas ese diccionario como lo hicimos aquí. Pero no te preocupes. Voy a cubrir eso y vamos a tener algunas aplicaciones agradables más adelante en el curso en la parte de aplicaciones. Estén atentos. 22. Operaciones con tipos de datos: Supongamos que tienes una lista de artículos de abarrotes y has hecho un programa, y has almacenado esos artículos en una lista de Python con corchetes. Ahora, en tu programa, los usuarios podrían eliminar y agregar elementos de esa lista. Así que remove y add son dos ejemplos de operaciones que puedes tener con listas. Entonces list es un tipo de datos y puede tener diferentes operaciones, que puede aplicar a un tipo de datos de lista Y entonces es posible que tengas algún texto en otro lugar de tu programa, y puedas capitalizar ese texto y así capitalizar es otra operación que puedes aplicar a un tipo de datos de flujo Entonces cada tipo de datos tiene sus propias operaciones. Entonces eso es lo que vas a aprender en esta sección. Entonces este fue un video introductorio. Te veré en el siguiente video. 23. Mensajes de error en Python 3.10: En esta conferencia, vamos a ver qué hay de nuevo en Python 3.10 con respecto a los mensajes de error Python 3.10 se lanzó en octubre de 2021, y sí tiene algunas mejoras con respecto a los mensajes de error y también otras mejoras, que voy a hablar en próximos videos en las siguientes secciones Entonces los mensajes de error, supongamos que tienes una expresión con mucho énfasis. Por ejemplo, quieres tener una cadena y quieres reemplazar el carácter I con un carácter Y en esa cadena. Pero si te pierdes un paréntesis y ejecutas el programa con Python 3.9, lo que obtuvimos es el error de sintaxis, claro, porque la sintaxis no es correcta, pero el error no es tan explicativo Entonces obtenemos el error de sintaxis inesperado Eof mientras analizamos. Entonces todavía no sabes lo que hiciste mal en tu código. Entonces hay que volver atrás y leerlo de nuevo. Ahora, compara eso con Python 3.10. Entonces, si cambio a Python 3.10 como intérprete y ejecuto el código con 3.10, esta vez, el error de sintaxis es más claro Entonces error de sintaxis, este paréntesis de aquí nunca se cerró. Entonces esa. Ahora sabemos que si empezamos un paréntesis aquí, debemos cerrarlo al final Este es el primer paréntesis, el paréntesis abierto. Debería tener un paréntesis de cierre. Entonces agreguemos eso. Otro ejemplo sería si tuvieras una lista, por ejemplo, uno, dos, y luego te faltara una coma, y si ejecutas con Python 3.10, vas a tener de nuevo este error de sintaxis sintaxis no válida Quizás olvidaste la coma, y nos señala con estas flechas en el lugar donde debería estar la coma Si comparas eso con 3.9, no es la mejor explicación. Dice sintaxis no válida, pero no dice explícitamente que nos falta una coma aquí Aún así, Python 3.10 es mejor para detectar comas faltantes. La idea es que en Python 3.10, obtengas el error de sintaxis y además obtengas alguna información extra Cerremos este video con un tercer ejemplo. Si cometes un error tipográfico, digamos que escribiste ritmo real en lugar de reemplazar, y vamos a tener la coma aquí Entonces todo está bien, excepto este error tipográfico aquí Entonces, si ejecutas esto con 3.9 primero, obtienes este error de atributo. Dice que el objeto string no tiene ningún atributo replace. Por lo que hoy en día no tiene el atributo en realidad un ritmo real. Y empiezas a preguntarte si replace no es un atributo de cadenas en absoluto. Entonces compara eso con 3.10, 3.10 run, y este es el error de atributo Entonces, ¿te referías a reemplazar eso es un error muy explícito y nos ayuda a solucionar rápidamente este error Entonces eso es lo que quería comparar Python tres con Python 3.10 para enfatizar las diferencias en cuanto a errores Ahora, en el curso, vamos a tener una sección dedicada a los errores, entonces cómo manejarlos, cómo leerlos, cómo no frustrarse con los errores de programación porque cada programador comete errores, así que hay que saber cómo solucionarlos. Por ahora, sigues siendo un principiante, así que sigue viendo videos y te volverás cada vez mejor en Python. Nos vemos en el siguiente video. 24. Hacer más operaciones con listas: Déjame ahora hacerte un poco más familiar con tipos de datos de la lista mostrándote lo que puedes hacer con ellos Sabes que ya eso lo que puedes hacer con ellos, puedes consultar con DR List. Puede ignorar los atributos que comienzan con doble subrayado y terminan con doble subrayado Básicamente son atributos utilizados por Python internamente, y rara vez vas a tener que usarlos. Entonces, por ahora, puedes ignorarlos y enfocarte en lo que realmente vas a usar, que es este conjunto aquí. Déjame abrir otro Python Shell y voy a aplicar algunas operaciones a esa lista en este shell Python. Entonces podemos ver qué métodos podemos aplicar en esta ventana y podemos aplicar los métodos en esta otra aquí. Y no sólo quiero que te enseñes lo que esto hace en la oscuridad. Quiero mostrarte la forma en que puedes averiguar tú mismo qué hacen estas cosas. Así que siempre usa la función de ayuda. Lista, probemos el método append. Ahora, voy a escribir la variable, pero no tienes que teclearla toda. Una vez que haya comenzado a escribir ese nombre de variable, puede usar tab, y eso completará automáticamente el nombre de la variable. Luego usa una notación de puntos y anexar, y luego dos paréntesis Entonces dentro del paréntesis, verás que esto lleva dos Argumentos En realidad, es sólo un argumento. Es sólo el objeto mismo. Self se refiere a la lista en sí, y objeto es en realidad lo que se quiere agregar a esa lista Digamos que quieres agregar 8.1 así, si revisas las temperaturas de los lunes, verás que ahora tiene un ítem más Entonces esa es la sintaxis de append. Siempre ignoras a self porque self se pasa automáticamente como argumento a ese método, y self es básicamente la lista real en sí misma. Intentemos otro método. Que aquí para dejar de fumar, lista de ayuda, claro. ¿Cómo funciona? Bueno, en este caso, ves que no recibe ningún argumento. Entonces las temperaturas del lunes eso es claro así. Y lo que hace, simplemente borra la lista, elimina todos sus ítems Déjame también intentar indexar y dejar la lista para que la pruebes. Index obtiene en realidad un valor, un inicio y un stop, y devuelve el índice del valor. Entonces, ¿qué es un índice? Vamos a probarlo índice de puntos, el valor con valor lo que significa Python es uno de los valores de la lista. Ahora, como tenemos una lista sin valores, voy a recrear la lista otra vez así Ahora esta es nuestra lista. Déjame probar índice con paréntesis y el valor, digamos 8.8 Eso devolverá uno. ¿Por qué? Eso es porque las listas tienen sincronización de índices en segundo plano. Aunque no lo veamos, cada uno de estos ítems está asociado a un índice. El primero tiene un índice de cero. El segundo tiene un índice de uno, y el último tiene un índice de dos. En este caso, y así sucesivamente. Ahora en este caso particular, también vemos este argumento y este otro para el método index. Sin embargo, si no quieres pasar esos valores, solo puedes pasar un valor. Entonces como lo hice aquí, 8.8, eso significa que 8.88 será el valor, esto por defecto, start será igual a cero, y stop será igual a este valor Entonces, ¿qué es start and stop? Bueno, cuando es cero como es por defecto, eso significa que estás buscando 8.8, comenzando desde el primer ítem de la lista. Entonces el intérprete iniciará la búsqueda desde el primer ítem, entonces el ítem con índice cero, y buscaremos 8.8, y lo encontrará, y te dirá que tiene un índice de uno. No obstante, si quieres decirle a Python empiece desde el ítem con el Índice dos, digamos, así que para iniciar una búsqueda desde aquí y hacia adelante a la derecha de 7.5, lo que pasa a no tener más ítems. Pero de todos modos, así que te estás saltando esta parte de la lista. En ese caso. El intérprete te dirá que 8.8 no está en la lista con ese inicio. También tienes el stop, que es por defecto, este gran número. Entonces, si quieres limitar la búsqueda en el índice de la derecha, también puedes hacerlo. Pero por defecto, vas a mantener ese cero. Y eso te dirá que el número tiene ese índice. Más sobre la indexación en el siguiente video. 25. Cómo acceder a los elementos de la lista: Anteriormente, te mostré que para obtener el índice de un ítem, puedes usar el método index. Ahora bien, ¿cómo podemos hacer lo contrario? ¿Cómo podemos obtener un artículo dado su índice? Bueno, para eso, necesitamos mirar una vez más la lista de atributos que podemos aplicar a la lista. Y sé que podemos usar el método de subrayado get item underscore underscore Bien, sé que te dije antes que estos métodos rara vez vas a usar, y de hecho, no necesitamos este método para lo que voy a hacer ahora, pero déjame explicarte por qué en solo un poco, entenderás. Este es un secreto muy de Python. Entonces déjame seguir adelante y usar get item con guiones bajos dobles, y por supuesto, es un método, así que necesita este paréntesis de corchete redondo Entonces intentemos obtener el ítem con índice uno. ¿Cuál sería eso? Bueno, 8.8. Ahora bien, el secreto es que no hay que usar ese método feo ahí con esos dobles guiones bajos Todo lo que tienes que hacer es usar esta sintaxis, llamar así al nombre de la variable y luego agregar corchetes abiertos y de cierre, y luego dentro de ellos, solo ingresa el índice. Eso te dará el valor, el ítem para ese índice nuevamente. A pesar de que estás haciendo esto, Python en segundo plano realidad está llamando a este método y está pasando este elemento, este valor como entrada para ese método. Entonces esto es en realidad lo que está pasando en segundo plano, pero Python te permite hacerlo de una mejor manera como esta aquí dentro. 26. Cómo acceder a los segmentos de la lista: Tengo una lista de cinco ítems aquí. Déjame mostrarte por qué usa una función n y ves que realmente tiene cinco elementos. Ahora, además de acceder a elementos individuales de tu lista como ese ítem con índice tres, cero, uno, dos, tres, 6.6, también puedes acceder a partes de la lista. Digamos, 1-4, eso te dará otra lista. Entonces los resultados de esto también es lista, y va a contener los ítems con Índice uno, índice dos e índice tres. El límite superior, no está incluido. Nunca se incluye en una rebanada de Python. Entonces esta es una rebanada, y esta es la salida de la rebanada. Tratemos de obtener los dos primeros elementos de la lista. Los dos primeros ítems tienen un índice de cero y uno. Entonces empezaremos con cero. Como también queremos el ítem con índice uno, vamos a escribir dos ahí para que obtengamos uno. Esa es la salida. Por lo que el índice dos no está incluido, 7.5 no está incluido. También puedes usar un atajo para eso. No es necesario que escriba cero si pretendía obtener todo a partir del primer ítem, y eso le dará la misma salida. De igual manera, si quieres obtener, digamos, los dos últimos ítems, puedes comenzar a contar cero, uno, dos, tres. Tres, partimos de tres, esto tiene un índice de cuatro, así que ahí vamos a escribir cinco. A pesar de que obtuvimos el resultado esperado, será mejor que estés usando el atajo para eso. Entonces esto es más intuitivo porque te dice que estás extrayendo del ítem con índice tres al último ítem de la lista. Entonces sin saber cuántos artículos hay en la lista. Del mismo modo, aquí, estás extrayendo desde el primer ítem al ítem con índice uno. Ahora bien, para las listas grandes, cuando se quiere extraer los últimos ítems, puede que no tenga mucho sentido contar desde el principio, uno, dos, tres, cuatro, cinco, seis, y así sucesivamente. Pero Python tiene otro sistema de indexación, y eso te lo mostraré en el siguiente video. 27. Cómo usar los índices negativos: Entonces, ¿cómo obtenemos el último ítem de esta lista? Bueno, puedes hacerlo haciendo referencia a la lista y luego corchetes y luego referirte al índice del ítem que deseas. Entonces 9.9 tiene un índice de cero, uno, dos, tres, cuatro, cuatro Bien. Pero una forma más inteligente es usar una indexación negativa, lo que significa que en lugar de contar, solo puedes escribir menos uno y obtienes 9.9 Entonces cada uno de los ítems de una lista de Python tiene dos índices, negativo y otro positivo. Entonces menos uno para esto, menos dos para eso, menos tres, menos cuatro, menos cinco. Entonces menos cinco es el primer ítem, en realidad, 9.1. Y por supuesto, puedes hacer rebanado de listas usando indexación negativa Tratemos de conseguir los dos últimos artículos. Entonces para hacer el rebanado, hay que poner el índice del primer elemento de la rebanada Entonces el primer ítem de la rebanada es 6.6 y 6.6 tiene un índice negativo de dos. Usa una columna, y luego no quieres asignar nada aquí porque quieres todo lo que viene después del 6.6. Así que así, y sacas la cola de la lista. Entonces de manera similar, puedes hacer menos cuatro menos dos, por ejemplo, eso te dará 8.8 menos cuatro menos tres, y menos dos no está incluido en la rebanada, porque te dije que el límite superior nunca se incluye en la rebanada. Entonces solo obtienes esto y aquello. También puedes comenzar desde el inicio de la lista para obtener 9.1, el primer ítem así. 28. Cómo acceder a personajes y rebanados en cadenas: Para su sorpresa o no, las cadenas también cuentan con un sistema de indexación. La buena noticia es que tienen exactamente el mismo sistema que las listas. Entonces tienen indexación positiva y negativa, y puedes cortarlos y puedes acceder a los elementos de ellos. Déjame hacer una demostración rápida. Cadena hola que te dará la cadena E, que sigue siendo una cadena. Hola es una cadena, E también es una cadena, una indexación negativa, y también rebanar Una cosa genial que puedes hacer es dejarme obtener esta lista. Entonces es una lista que contiene diferentes tipos de objetos. Y lo que puedes hacer es acceder ¿adivinarlo? Bueno, esa es la cuerda amarilla, entonces el primer elemento de la lista. Entonces puedes usar una indexación de cadena, como, por ejemplo, si tecleas dos ahí, adivina qué vas a conseguir Bueno, vas a obtener la primera L porque eso tiene un índice de dos, entonces cero para H uno, para E, dos para L. Porque esta parte de aquí es un valor por sí sola, y esta otra parte obtendrá el ítem con índice dos de ese valor, que pasa a ser una cadena. Es tan sencillo como eso. 29. Cómo acceder a elementos en los diccionarios +: ¿Los diccionarios tienen el mismo sistema de índice que list y strings? Vamos a averiguarlo. Tengo este diccionario aquí en mi shell Python, grado de estudiante. Entonces intentemos conseguir el segundo artículo, tal vez. No, dice error clave, uno, lo que significa que el diccionario no tiene una clave llamada uno Entonces, ¿qué claves tiene el diccionario? Quizá la misma llave. Sí. Entonces los diccionarios, en lugar de enteros, tienen claves como índices Entonces una lista sería acceso. Se accedería a los ítems de la lista vía enteros, los cuales comienzan desde cero y terminan hasta el último ítem de la lista, el índice del último ítem de la lista Con los diccionarios, esto es diferente como puedes ver, y esto es en realidad lo que hace que los diccionarios sean un diccionario. Veamos otro ejemplo de lo útil que es esto. Digamos que tienes este diccionario, inglés al portugués. Es un verdadero diccionario humano. Ahí tienes algunas palabras. Digamos en Suva en portugués y el sol será así. Lo siento, ahí tengo un error tipográfico. Códigos. Entonces ahora, si quieres la versión portuguesa del sol, escribes eso, y eso te dará esa versión. Entonces tener enteros como índices en este caso, sería muy inútil. Así que cada caso de uso tiene su propia estructura de datos para ser utilizada en Python. 30. Más conceptos básicos de Python: funciones y condicionales: Hola, bienvenidos a un nuevo video, y este es un video introductorio de la sección de funciones y condicionales. Entonces ahora estás entrando en una sección más avanzada de Python. Las funciones y condicionales son algunos conceptos básicos avanzados de Python, y estos son bloques muy fundamentales que puedes usar para hacer que tus programas sean más inteligentes y más manejables Entonces haces que tus programas sean más inteligentes haciéndolos tomar decisiones y que puedas implementar vía condicionales. Entonces, si tu programa obtiene algunas entradas y quieres pensar, quieres que tu programa piense si esa entrada está bien o no, y quieres hacer algo si esa entrada es verdadera y otra cosa si esa entrada es falsa. Entonces estás tomando decisiones en tu programa a través de un bloque condicional. Y entonces tienes funciones por otro lado, las funciones se utilizan para envolver en bloques de código, por lo que bloques similares de código. Te ayuda a organizar tu código. Entonces una función, por ejemplo, podría convertir USD a euros. Entonces esta función hace esto ciertas cosas y lo hace bien. Entonces obtiene USD como entrada, y te da euros como salida. Entonces dentro de la función, tienes esas operaciones matemáticas que hacen la conversión. Entonces las condiciones y las funciones son dos cosas que vas a aprender esta sección a través de ejemplos, claro. Entonces te veré en el siguiente video. 31. Cómo crear tus propias funciones +: Anteriormente en el curso, estábamos buscando una función media o media que Python pudiera tener para permitirnos hacer el promedio de los ítems de los números de una lista. Y descubrimos que Python tiene algunas funciones más fundamentales como length para obtener un número de ítems de una lista y sum para hacer la suma de los números de lista, pero no tiene una función mean. Entonces terminamos haciendo esto. Teníamos esta lista. Calculamos la suma usando la función sum, calculamos la longitud, así el número de ítems usando la función length, y luego hicimos la división entre sum y length para obtener la media. Sin embargo, el hecho de que Python no tenga una función media no significa que no podamos crear nuestra propia función media. Lo que vamos a hacer ahora es que vamos a crear nuestra propia función media. Para crear funciones en Python, usa la palabra clave def y luego elige un nombre para su función El nombre tiene que seguir las mismas reglas de nomenclatura que con las variables Entonces no puede comenzar con un número, no puede comenzar con un operador matemático. Digamos que significa entonces usas paréntesis redondo y dentro esos y la primera línea termina con una columna Dentro del paréntesis, opcionalmente, puede ingresar algunos parámetros de su función Parámetros, en otras palabras, es entrada que obtendrá tu función y que procesará esa entrada y que producirá una salida. El insumo en nuestro caso sería una lista. No obstante, aquí hay que dar un nombre, siguiendo de nuevo las mismas reglas que con las variables. Digamos mi lista. Bien, entonces quieres presionar Enter ahí, y ves ese código de estudio visual automáticamente. Entonces el editor sangró la siguiente línea con cuatro espacios, uno, dos, tres, cuatro Entonces eso es lo que requiere la sintaxis que después de la primera línea, así que después de haber definido qué nombre desea para su función y qué parámetros desea, tiene que sangrar las siguientes líneas Entonces, o tu editor lo hará automáticamente, pero si no lo hace, uno, dos, tres, cuatro, sangra cuatro espacios ahí dentro También puedes hacerlo con un espacio o solo un espacio. También funcionaría, pero se recomienda utilizar cuatro espacios. Todos usan cuatro espacios porque es más visible el código con sangría, por lo que hará que tu código sea más dragable Entonces puedes comenzar a calcular la media. Digamos la media. Voy a llamarlo así para no confundirlo con el nombre de la función Esa sería la suma de mi lista, dividir por la longitud de mi lista. Y a continuación, lo que queremos hacer, queremos usar la palabra clave return. Y a eso le sigue lo que se quiere devolver. Bueno, queremos devolver la media. Ahora, sálvese. Y déjame abrir una terminal. Quiero ejecutar este script ahora. Entonces déjame mostrarte lo que va a pasar. En realidad no va a pasar nada. No pasa nada porque lo que hace Python es que simplemente lee esta definición. Esto es como un plano. Has declarado lo que debería hacer tu función, pero no le dijiste a Python que ejecutara tu función. Para ejecutar su función, desea llamar a la función pasar un valor de entrada para ese parámetro que definió. Como quiera imprimir imprimir, abra paréntesis ahí, cierre paréntesis ahí, guarde, no olvide y ejecute Y esa es la media de esos tres números. Así que así, puedo probar esto fácilmente con muchos valores de entrada. Así como así, no tengo que reescribir nada aquí. Esa es la belleza de una función. Para que puedas ver la similitud aquí. Al igual que usamos la función sum, estamos usando la función Mint de la misma manera. Entonces suma obtiene este valor de entrada El hombre obtiene este valor de entrada. Esto pasa a ser una variable. Esto pasa a ser un valor directo, pero no importa. Si compruebas el tipo de media, tipo media y tipo de suma, lo que vas a ver es que Mean es una función. Entonces eso fue impreso. Esto fue impreso por esto. Así que la media es una función y suma otra vez, es una función, pero es una función incorporada. Así que está integrado en el intérprete de Python. Fue diseñado por el equipo de desarrollo principal de Python, y esta función la diseñé yo, el programador. Entonces así es como creas y llamas a una función en Python. 32. Cuándo usar Print and Return +: Algo a señalar es que cuando tu función no tiene una sentencia return, save, execute, devuelve implícitamente un non-object Ninguno es un objeto específico en Python, lo que no significa nada. No es un entero, no es un flotador, no es una cadena, simplemente no es ninguno. No significa nada. Python, lo que hace es que si no encuentra la sentencia return en segundo plano, hace esto no devuelve ninguno. Entonces si ejecutas eso, Uy, un error de sangría. Eso es algo bueno. Ves que todo este bloque aquí tiene que ser del mismo nivel de sangría Si sangraste cuatro líneas aquí, tienes que sangrar cuatro líneas aquí también Por lo que la sangría tiene que ser consistente. Eso se ve bien. Entonces obtuvimos los mismos resultados, ninguno aquí y ninguno allá. Algunas personas cometen este error. En lugar de regresar, usan impresión. En lugar de usar return, usan una función de impresión. La media, que funciona a la mitad del camino. Por lo que sigue devolviendo el valor y tampoco devuelve ninguno. Entonces lo que está pasando aquí es que cuando llamas a la función aquí, Python ejecutará todas estas líneas, así calcula la media, luego va a la siguiente línea. Entonces línea por línea, imprimirá la media, por lo que imprimirá la media aquí dentro, y luego buscará una declaración de devolución. No lo encuentra, por lo que no devolverá ninguna. El problema con esto es que si intentas hacer algunas otras operaciones con tu valor medio, digamos, mi media es igual a la función media cero, tres y cuatro. Bien. Y quiero imprimir mi media más diez. Entonces yo esperaría que esto me diera el valor de siete es la suma dividida por tres, dos puntos algo más diez, 12 punto algo. Pero veamos qué me va a dar esto. Entonces esto me dará un error de tipo en su lugar. Traté de agregar el non type, que es none. Entonces este es un no tipo. Ese es el tipo de este valor. Se trata de sumar eso a diez. Entonces mi media es ninguno porque no devuelve ninguno. Un intérprete intentará sumar eso a diez. Eso no es posible. Entonces por eso no deberías usar print. Si sustituyo eso con return en su lugar, quite el paréntesis, guarde, ejecute, eso me dará 12.3 Ese es el promedio más diez. Sin embargo, esto no significa que no puedas usar print en tus funciones. En realidad puedes hacer eso. Digamos que solo quieres imprimir alguna información. Tárralo. Funcionar, estudiar y ejecutar eso. Obtienes la salida de print aquí, y luego Python devuelve la media. Obtienes la media, la guardas aquí, la salida de tu función, pero el valor de la función es siempre lo que vuelves aquí. Si ves eso Así siempre usa return en tus funciones a menos que tengas una razón muy especial para hacerlo. 33. Introducción a los condicionales: Definimos esta función en las conferencias anteriores, que es capaz de calcular la media de una lista. Sin embargo, qué pasa si en lugar de pasar una lista como entrada, pasamos un diccionario. Calificaciones de los estudiantes es este diccionario aquí. Veamos qué va a pasar. Bueno, dice un tipo de operando sin soporte. Entonces ocurrirá un error con la función sum porque intentará sumar cadenas y enteros, y esta función no está diseñada para procesar diccionarios Está diseñado para procesar la lista. Entonces, ¿cómo podemos hacer que esta función procese tanto listas como diccionarios? Podemos hacerlo usando condicionales. Veamos cómo hacerlo en los próximos videos. 34. Cómo usar la condicional If: Esta función devuelve el valor medio de una lista, pero queremos hacerla más inteligente. Queremos que la función devuelva la media aunque el valor de entrada sea un diccionario. Entonces cuando el valor de entrada es una lista, va a aplicar un algoritmo específico y devolver el valor específico, que es una novela media es cuando es un diccionario, va a comprobar si es un diccionario y aplicar el algoritmo correspondiente que calcula el valor medio de un diccionario. Entonces sabemos que algunas temperaturas de lunes divididas por duración de las temperaturas del lunes te da la media de la lista. De igual manera, las calificaciones de los estudiantes , que es un diccionario, sus valores, la suma de sus valores dividida por la longitud del diccionario de calificaciones del estudiante, te darán la media, por lo que queremos que nuestra función verifique y tome una decisión. Este es un parámetro. Déjame cambiarlo a valor. El valor es un nombre más significativo ya que lo que estamos procesando no sólo será una lista, sino que también puede ser un diccionario. Y luego bajo la función, todo tiene que ser sangrado Se puede ver que todo el cuerpo de la función está sangría. El bloque condicional que voy a escribir aquí también va a ser sangrado Comienza con si recuerdas, usamos una función type antes en el curso, que devuelve el tipo de un objeto. Por ejemplo, este es un diccionario, uno vacío, pero sigue siendo un diccionario. Entonces lo que puedes hacer aquí es que puedes decir, escribo valor, operador de doble asignación, lo que significa igual. Es un operador de comparación, yo verifico la igualdad. Si eso es un dict, una columna, enter, y tiene que ser sangría con cuatro espacios Entonces ya ves que es otro nivel de sangría. Es uno aquí para mí, y esto es para la función. Entonces aquí, la media será igual a la suma del valor que los valores dividen por la longitud del valor. Entonces este es un diccionario, dict valores de punto y longitud del diccionario. Tengo que cerrar la llamada a la función sum ahí así e ingresar si has terminado con I block. Entonces, si eso es todo lo que quieres verificar, entonces dices otra cosa, y tenemos este código, que también tiene que ser sangría bajo s, y eso es todo Déjame probar esto. Entonces con las calificaciones de los estudiantes, el diccionario como entrada, aquí obtuvimos este valor. Si usé las temperaturas del último lunes, me va a dar el otro valor, que es la media de las temperaturas del lunes. Entonces eso es un condicional if and else. Pero déjeme explicarlo línea por línea en el siguiente video. 35. Una explicación condicional línea por línea: Entonces, ¿qué está pasando en este guión? Déjame explicarlo línea por línea. Python ejecuta la definición de función, pero no hace nada porque es solo una definición de función Python hace cosas cuando encuentra una llamada a función, como esta de aquí. Entonces aquí estamos llamando a la función y el valor de entrada para esa función será la temperatura del lunes, que es equivalente a esta lista. Esta lista irá y se almacenará en esta variable. Entonces un valor es igual a esta lista. Entonces lo que pasa es que el intérprete comprobará si el tipo de esa lista está muerto. Si eso es cierto, entonces ejecutará esta línea aquí. Voy a asignar la salida de esta expresión a la variable media. No obstante, esto no es cierto en este caso porque el tipo de la lista no es adicto Entonces Python no ejecutará esta línea. Pasará a la siguiente línea. Entonces, si eso no era cierto, entonces va a hacer esto aquí. Entonces la media será igual a la suma de la lista dividida por la longitud de la lista, que es 9.26 algo Y entonces este es el valor actual de la media, por lo tanto, aquí termina la sangría. Entonces el regreso está fuera del bloque I y else. Se puede ver aquí. Tiene que estar afuera. Entonces el bloque condicional termina aquí y el valor actual de la media será devuelto por la sentencia return. Entonces obtienes ese valor medio para esa lista. Si en cambio esto fuera grado de estudiante, lo que sucede es que este diccionario se almacenará en valor y si tipo de valor es dict, sí, es dict. La media será igual a eso. Entonces a la media del diccionario. Y si esta condición es verdadera, esto se ejecuta, y Python ignorará todo lo que está bajo else. Dije todo lo que está bajo ls, que significa todo lo que está sangría debajo de lo demás. Entonces los hijos de lo demás por así decirlo, el retorno de la media no es hijo de ls. No tiene sangría bajo ls, es independiente. Tiene su propio nivel de sangría. Entonces, por lo tanto, el valor actual de la media es éste de aquí. Entonces devuelve la media, en realidad devolvemos la media para el diccionario. Ese de ahí dentro. 36. Más información sobre las condiciones y: Ahora bien, este bloque condicional pasa a estar dentro de una función, pero también puede estar fuera de una función como esta. Y digamos tres mayores que uno, imprimir mayor otra cosa Imprimir, no mayor. Y conseguirás mayor. Lo que comprueba un bloque condicional es en realidad comprueba si esto es cierto. Entonces true es en realidad otro tipo en Python, igual que enteros y leads y cadenas True es otro tipo. Entonces ese es en realidad el equivalente de si es cierto, imprimir mayor, de lo contrario, imprimir, no mayor. Así que la verdad siempre es verdad. Del mismo modo, el tipo tres, por ejemplo, igual a t devolverá verdadero. Entonces eso es lo que estamos haciendo aquí también. Sin embargo, hay otra manera que se considera mejor en Python para usar es instancia es valor de instancia, y desea verificar diccionarios aquí así. Ejecuta y vas a obtener la misma salida. Yo instancia, tres int, te conseguirá la misma salida. Puedes usar cualquiera, pero por algunas razones avanzadas, que no voy a explicar ahora mismo porque está fuera de contexto. En este punto, claro, es mejor usar es instancia. Ahora bien, viste este ejemplo donde usé si tres es mayor que uno, e imprimí mayor y no mayor. También podríamos tener estos tres casos tres es mayor que uno, tres es igual a uno, y tres es menor que uno. En ese caso, si una otra no es suficiente, necesitamos otra cosa. Te voy a mostrar cómo podemos hacerlo en el siguiente video. 37. Usar el condicional Elif: Tengo estas dos variables aquí, cada una de ellas tiene un valor y déjame escribir una condición que hará algo diferente dependiendo de si X es mayor, igual o menor que Y. I X es mayor que Y, print. X es mayor que Y. Si X es igual a Y, imprimir A S es igual a Y. Y entonces lo que queda, ¿cuál es el condicional? Si X no es mayor y no es igual, bueno, s. entonces si tuviste más condicionales para comprobar, puedes continuar con si eso y L esto y aquello y así sucesivamente Pero si has terminado, puedes usar Ls. Imprimir, entonces tiene que ser X es menor que Y. Y así obtenemos X es mayor que Y. 38. Espacio blanco y: En esta conferencia, me gustaría aclarar el uso del espacio en blanco. Entonces, cuándo usar un espacio en blanco, cuándo usar más de uno y cuándo no usar el espacio en blanco. Para explicarte eso, aquí tengo un guión con tres partes. Cada una de las partes hará lo mismo. Entonces el primero imprime A, aA, y tres como, y luego B, aquí, y luego C. Entonces el primero, aquí escribí uno, dos, tres, cuatro, cinco, seis, seis, seis espacios Entonces eso va a funcionar. Como puedes ver aquí, obtienes la salida correctamente, pero no es una buena práctica. A pesar de que eso va a funcionar, no es una buena práctica porque el código no es muy legible. Entonces eso es un problema con este primer bloque. Y aquí en el segundo bloque, lo arreglo. El espacio aquí es justo. Básicamente, se quiere separar las cosas con espacios. Cuando se trata de operadores como los operadores de comparación o más o menos o multiplicación, el código funcionará aunque no tengas ningún espacio así Sin embargo, para que el código sea más legible, es mejor tener algunos espacios también es mejor tener algunos espacios entre operadores. El espacio entre I y un número es imprescindible. Si tienes eso, el código no funcionará. Obtendrá una sintaxis no válida. Sin embargo, ningún espacio entre operadores está bien. Entonces eso es un problema en este bloque de aquí que se tiene esta expresión sin espacios. En algunos casos particulares, a veces, no uso espacios en los videos porque quiero mostrarte el texto en fuentes mayores, así que tengo que sacrificarme con menos espacios para que pueda colocar más textos en la pantalla. Entonces, a menos que tengas una buena razón para hacerlo, por favor usa espacios un espacio. Entonces aquí eso está bien. Un espacio aquí, uno aquí, y otro allá, y luego después de la columna, esto es lo que debes saber. Ya te hablé de la sangría. Después de una columna, siempre tienes sangría. La sangría significa al menos un espacio. Esto también funcionaría así, pero una buena práctica es tener cuatro espacios, cuatro. Eso es correcto. Y cuando tienes más código en tu script, es bueno separar las cosas con línea de rotura para separar lógicas Entonces, si ahí tienes un bloque condicional, tienes que escribirlos línea por línea. Aquí no hay líneas de ruptura así. Eso también funcionaría, pero por favor no uses líneas de interrupción para que tu código sea más legible. Sin embargo, una vez que termina el bloque condicional, tienes otro bloque lógico no hay reglas claras aquí, sino que solo usa la lógica. Entonces pensé que es bueno tener estas funciones de impresión sin línea de ladrillo entre ellas. Entonces aquí, si agregaría otra función, haré una línea de ladrillos y luego crearé una función aquí y así sucesivamente. Y por supuesto, usa sangría para funciones también. Entonces después de la columna, siempre viene la sangría Eso es más o menos sobre el espacio amplio espacio en Python. 39. Más conceptos básicos de Python: procesamiento de la entrada del usuario: Bienvenido a una sección del curso. Aquí vas a aprender a interactuar con el usuario a través de tu programa Python. Por lo que su programa Python puede obtener la entrada del usuario. Puede solicitar al usuario algunas entradas, y el usuario ingresa alguna entrada, y el programa para su script de Python obtenga esa entrada, y la procesará, y luego dará algunos resultados. Entonces veamos en esta sección cómo se puede obtener la entrada del usuario, procesarla y producir alguna salida. Te hablaré en el siguiente video. Gracias. 40. Aprende más sobre la entrada del usuario: Como ustedes saben, a partir de las conferencias anteriores, hemos definido esta función, y aquí la estamos llamando para que compruebe si la temperatura dada es mayor siete y vuelve cálida si eso es cierto y fría si la temperatura es igual a siete o menor que siete. Eso está bien. Pero, ¿cuál es el uso de esta función en un entorno de la vida real? Al igual que, ¿quién está dando esta entrada? Tú como programador, estás escribiendo esta función para otra persona para que la pueda usar. Pero no esperas que editen el archivo Python como tener editor como código de Visual Studio u otros editores. Y entonces no puedes simplemente decirles que vayan a la línea siete y cambien el valor y luego ejecuten ese código para obtener diferentes salidas dependiendo del valor. Entonces, ¿qué tal si se le pide al usuario que introduzca un valor? Y luego el usuario escribe en el valor, y luego obtenemos ese valor y lo procesamos en nuestra función. En ese caso, obtenemos ese valor y lo ponemos aquí en la llamada a la función. Hagámoslo. Así que ahí tenemos una función. Queremos obtener un valor del usuario. Para obtener un valor del usuario, utilice la función de entrada. La función de entrada obtiene un argumento, y ese es el mensaje que desea mostrar al usuario en la línea de comandos. Por ejemplo, ingrese Introducir temperatura. A lo mejor pon una columna ahí si quieres, puedes escribir lo que quieras. Déjame guardar el guión y ejecutarlo. Ya ves ahora lo ejecuté, y esta función de entrada, lo que hace es que congela la ejecución de un programa y espera la entrada del usuario en la línea de comandos Entonces si entro algo aquí como siete, en este caso, lo que va a pasar es que esta expresión aquí será igual a siete. obstante, como aquí no hicimos nada, nada va a pasar si imprimimos este valor por ejemplo, siete, te imprimirán el valor de este, que es siete. Entonces ahí puedes poner lo que quieras. Hola, y te colocas ahí, impreso. Lo que sugiere es que en lugar de imprimir esto, primero querrías ponerlo en una variable. Eso lo haría más legible. Entonces usa tu entrada, y luego puedes hacer lo que quieras con esa variable como bajarla. Así que imprime la versión en minúscula de eso. Hola a él. Entonces obtienes hola hola con letras minúsculas. Bien, volvamos a nuestra función. Permítanme ahora intentar imprimir salida de la función de condición meteorológica con un valor de, bueno, entrada del usuario, lo que sea que el usuario ingrese como entrada. Entonces voy a ejecutar el programa ahora. El programa me preguntará con temperatura de entrada. El programa me pedirá que entre una temperatura, por lo que la ejecución se congela en este punto. Esta línea aún no ha sido ejecutada. Se ejecutará después de que le demos un valor aquí y presionemos Enter. Entonces déjame anotar seis. Veamos qué vamos a conseguir esta vez. Nos sale un error. Leamos atentamente el error. Se trata de archivo Basics punto PY, cual es nuestro archivo, ¿de acuerdo? El error ocurrió al principio en esta línea aquí. Entonces aquí, imprimir condición climatológica, entrada del usuario. Cuando Python intentó ejecutar esta línea, no pudo hacerlo. ¿Y por qué? Bueno, hay que seguir el error. Así que sigue siendo lo básico de la línea, esa es la línea dos. Esta línea. Entonces, cuando Python intentó ejecutar esta línea, esa línea llamó a algunas otras cosas en el script. Y el error estaba en esta línea dos. Entonces, cuando la llamada a la función intentó llamar a la función, intentó ejecutar esta línea. Entonces si la temperatura trató de comparar cinco con siete. Y luego obtuvo este error cuando intentó comparar cinco con siete. Entonces cuando intentó ejecutar esta línea, decir, ver qué dice. Error de tipo. Este operador no es compatible entre instancias de cadena y entero. Entonces string e int, lo que significa que esto era una cadena, y esto era un int. Entonces nuestra entrada de usuario fue siete se pasó aquí, y eso se comparó con siete. Parece que nuestra entrada, la entrada del usuario era una cadena, y eso es cierto, y ese fue el punto que estaba tratando de hacer aquí porque sea cual sea la entrada, el usuario escribe aquí, aunque sea un número, Python realmente lo convertirá en aunque sea un número, una cadena. Entonces siete, de hecho, se convertirán a una cadena como con comillas o comillas dobles dentro de Python. Pero eso tiene una solución fácil. Lo que puedes hacer es convertir este valor, que es una cadena siete, puedes convertirlo en un flotador. Tenga cuidado con los paréntesis. Entonces flotar es una función. Tiene un paréntesis abierto aquí y tiene un paréntesis de cierre La entrada también es una función con sus propios paréntesis de apertura y cierre Entonces ahora si hago eso, la temperatura cinco, voy a obtener la respuesta correcta. Y déjame ser transparente contigo. Vamos de nuevo, entrada obtener entrada de usuario, introducir alguna entrada. Permítanme ahora imprimir el tipo de entrada del usuario. Ejecutar y seis, verás que seis en realidad es una cadena. Por eso lo estoy convirtiendo en un flotador para que seis esta vez sea un flotador en realidad, que se ve así. Puede imprimir el número real aquí, el número convertido real, la versión flotante del número, ejecutar de nuevo, 6.0. También puedes usar int aquí si quieres, seis, así obtendrás seis, que es igual a 6.0, por supuesto. Pero los flotadores serían una mejor opción porque puedo mostrarte por qué Si ingresa 6.3, por ejemplo, no podrá convertirlo porque eso es como hacer Int, 6.3 en código doble. Entonces Int se confundirá, no sabrá cómo convertir eso en un entero. Hace, sin embargo, convertir seis si se trataba de un seis simple sin un punto decimal. Flotador convertirá lo siento, tanto seis como 6.3. Así es como usas la entrada del usuario en Python. 41. Formato de cadena y: ¿Cómo harías un programa que se comporte? Así, te pide tu nombre, y pones tu nombre como usuario, y el programa te saludará un mensaje hola y tu nombre ahí y también un signo de exclamación al final de la cadena Bueno, haces eso con dos cosas. Primero, necesita la función de entrada para pedirle al usuario la entrada para solicitar al usuario la entrada, y luego necesita el formato de cadena. Así es como se ve el formato de cadena en Python. Entonces, en la primera línea, estamos obteniendo la entrada del usuario, almacenando esa entrada como una cadena en la entrada del usuario, y luego creamos una variable. En esa variable, almacenaremos el mensaje que estamos construyendo. Y esto de aquí es una expresión de formato de cadena. Entonces queremos imprimir hola y luego tener un espacio, y luego queremos imprimir el nombre del usuario, así el valor que ingresa el usuario. Y esto de aquí, porcentajes es una cadena especial en Python. Entonces tenemos un signo de exclamación, que es una cadena normal Y una doble cotización. Entonces esto es especial aquí. Y luego después de la cadena, no quieres poner una coma, lo que quieres hacer es usar este operador de porcentaje y luego usar una variable Ahora bien, el valor de esta variable irá y reemplazará el porcentaje S. Entonces lo que obtienes en cambio es hola y tu nombre ahí. Ahora bien, este método de formateo de cadenas mediante el uso de este porcentaje S aquí y el operador de porcentaje aquí, esto es válido para Python dos y Python tres también. Ahora hay otro método que se introdujo en Python 3.6. Entonces el método que presentaré ahora no funcionará si lo ejecutas con una versión de Python anterior a la 3.6. El método va así. Volvamos a almacenar toda la cadena en una variable, así que será una cadena con comillas dobles o comillas simples, lo que prefieras. Estoy usando comillas dobles. Así que hola, y usas estos corchetes. Y dentro de eso, pones el nombre de la variable ¿qué valor quieres que se ponga en este lugar? Ahora bien, esto no es todo. Entonces si guardo esto y ejecuto el código y digo, Agrégalo, devolverá esta cadena. Entonces tenemos que hacer algo más aquí. Lo que tenemos que hacer es añadir un prefijo F justo fuera del código. Entonces esta es la cadena. Esta F va fuera del código. Si guardo el script ahora ejecuto de nuevo, escribe mi nombre, y ahora obtenemos el resultado esperado. Tenga en cuenta que aquí tenemos dos variables con el mismo nombre, y lo que sucederá es que primero Python ejecuta un script de arriba a abajo, así que ejecuta la primera línea, ejecuta la segunda línea, por lo que almacenará hello audit en la Pero entonces estamos sobrescribiendo esa variable. Entonces en este caso, la cadena se escribirá en esa variable de mensaje. Entonces dondequiera que cree aquí, cualquier objeto que almacene aquí en la variable, ese objeto será el objeto actual al que se referirá esa variable. En este caso aquí, imprimimos el objeto que creaste aquí, que pasa a ser hola auditoría. ¿Cuál deberías usar? Bueno, si crees que tu proyecto se va a ejecutar con Python 3.6 o superior, entonces usa esta versión más agradable Es más legible. Si crees que tu proyecto, tus archivos Python se ejecutarán con Python dos o 3.1 o dos o tres, entonces es posible que quieras optar por este método. Porque a veces cuando implementas tu script en un servidor, por ejemplo, digamos que quieres ejecutar un script todos los días a una hora determinada, quieres implementarlo en un servidor web, y ese servidor web tendrá una versión específica de Python. A veces esa versión es Python dos. Entonces en ese caso, quieres ajustar tus scripts para que funcione con Python dos y el servidor web, el servidor, la computadora ejecutará tu script con una versión particular de Python. Vamos a ver esto más adelante cuando desplieguemos las aplicaciones web. Entonces, por ahora, estos son los dos métodos de formateo de cadenas. 42. Formato de cadena con múltiples variables +: Anteriormente, te presenté cómo insertar dinámicamente el valor de la variable dentro de una cadena. Así que aquí construimos hola y cualquier valor que el usuario ingresó en la función de entrada. Entonces esto funcionó con Python dos y tres. Esto funciona con Python 3.6 y versiones posteriores. Ahora bien, ¿y si queremos insertar más de un valor dentro de la cadena, cómo hacer eso? Por ejemplo, digamos, la primera función de entrada nos pedirá el nombre y la segunda nos preguntará el apellido. Llamemos a esta variable nombre y a este apellido. Para usar esta versión del formato de cadena con dos variables, es necesario hacer esto. En lugar de solo una variable, necesitas usar corchetes redondos y luego ingresar todas las variables que quieras insertar en el nombre de la cadena y apellido en este caso. Ahora bien, si ejecutas esto, vas a obtener un error. Entonces hay que hacer algo más ahí. Digamos auditoría. Ulce y tienes un error de tipo No todos los argumentos se convierten durante el formateo de cadena, lo que significa que los argumentos son nombre y apellido. No todos ellos fueron convertidos porque solo se convirtió el nombre porque aquí solo tenías un marcador de posición, porcentajes Quieres tener dos marcadores de posición, uno para apellido, dos Si ejecutas eso, Bueno, obtenemos otro error, pero eso no está relacionado con esta línea aquí. Esta línea está perfectamente bien. Funciona. ¿Por qué funciona? Bueno, porque se puede ver que ocurrió el error. Entonces aquí es donde comienza el rastro de regreso. Ves que el error ocurre en filebsics punto i, que es el archivo donde tenemos el código en la línea cinco, que significa que por encima de la línea cinco, todo está bien Entonces esta línea ahora ha pasado la comprobación de errores. Está libre de errores. Entonces esta es la línea que tiene el error, y es un error de nombre, entrada de nombre usuario no está definida. Entonces esta entrada de usuario aquí no ha sido definida en nuestro código. No tenemos una variable con ese nombre. Sólo lo estamos usando aquí, pero no lo definimos. Y aquí hay un truco. Si no quieres ejecutar esa línea, puedes ordenarla. Entonces, al agregar este símbolo aquí, Python ignorará esta línea. Lo tratará como un comentario. No como código. Así que guarda el script, ejecuta. Ingresa tu entrada como usuario, y esta es la salida que obtenemos esta vez. Entonces ese fue un buen ejercicio sobre cómo corregir errores. Ahora, volvamos a nuestras operaciones de formateo de cadenas. Veamos cómo va a funcionar esto ahora con dos variables. Entonces, la entrada del usuario ya no es una variable. Queremos usar nombre. Entonces hola nombre, y luego queremos tener un espacio aquí. Entonces este es un espacio en blanco. Entonces nombre, espacio en blanco, apellido. Y es tan fácil como eso. Ejecutar. Y obtienes la salida hola o el suche Entonces esa es la variable message, la cadena de la variable message. Entonces de esta manera, puedes poner tantas variables como quieras. Por ejemplo, ¿qué pasa? Cuándo podría ser una variable. Hoy, la cadena hoy es parte de la variable viento, la variable win será reemplazada aquí por el valor que tiene actualmente, que es hoy, ejecutar eso. Y así es como funciona. Y eso es lo que necesitas saber sobre formateo de cadenas en Python. 43. Introducción a For Loops +: Hola, bienvenidos de nuevo en esta nueva sección. En caso de que haya lagunas en tu conocimiento de Python hasta el momento con respecto a los conceptos básicos de Python que has aprendido a lo largo de estas secciones, entonces en esta sección, estoy tratando de llenar esos vacíos para que sepas lo que está pasando. Entonces lo haremos juntando todas las piezas creando una app más grande con los bloques de código que aprendiste para que todo empiece a tener más sentido y sepas cómo hacer programas del mundo real. Entonces este es el primer paso para hacer programas del mundo real. Y este no es realmente un programa del mundo real porque vamos a hacer algunos ejemplos más del mundo real en las próximas secciones. Entonces esto es solo para asegurarte de que aprendiste bien los conceptos básicos de Python. Entonces comencemos con el siguiente video. Te veré ahí. 44. Cómo y por qué usar bucles: En esta conferencia, voy a explicar uno de los conceptos más importantes en la programación Python, y es decir cuatro bucles. Voy a usar un ejemplo, para que no solo entiendas la sintaxis, cómo escribir un bucle de cuatro, sino que también entenderás por qué deberías usar cuatro bucles. Digamos que tenemos estas temperaturas para el lunes. A lo mejor esto se grabó por la mañana al mediodía y eso por la tarde ¿Cómo podemos hacer un programa que imprima los valores redondeados de cada uno de estos valores? Así. Entonces ese sería el resultado esperado. Se puede ver aquí abajo como se obtiene nueve porque 9.1 redondear hasta un número entero sería nueve, y luego 8.89 otra vez y 7.68 ¿Cómo podemos hacer eso? Entonces necesitamos encontrar una manera de acceder a los ítems de la lista. Y ya conoces un método como acceder a los elementos de la lista, que es usar índices. Entonces, si quieres el primero, usas cero. Entonces quieres imprimir el primer ítem, que, sin embargo, imprimiría 9.1. Quieres la versión redonda de 9.1, que es tal vez quieras buscar para echar un vistazo a qué funciones tienes disponibles. Así. Así que un vistazo rápido aquí y podrás encontrar un surround redondo, lo que significa que quieres redondear un número, surround 9.1, obtienes nueve. Y en nuestro caso, el número que nos gustaría redondear es esta expresión. Entonces queremos aplicar por aquí y entre paréntesis poner esa expresión, así que ese es el número 9.1 Así que pruébalo antes de escribir todo el código, y eso está bien. Hazlo otra vez. Pero con uno y con dos. Ejecutar, y se obtiene el resultado esperado. Bien, eso está bien. Funciona. Pero y si tuvieras una gran lista de 100 artículos, terminarías con 100 líneas de código. Bueno, puedo mostrarte cómo hacerlo con solo dos líneas de código en su lugar. Así es como lo haces. Se usa un bucle de cuatro para la temperatura, elige un nombre para una variable. Para la temperatura, se ve cómo se resaltan estas palabras clave. Entonces estas son en realidad palabras reservadas de Python. La temperatura es solo una variable. Por eso está en negro. En las temperaturas del lunes, usa una columna, y ¿qué pasa después de una columna que te dije en el video anterior? Bueno, sangría, que ocurre automáticamente en código de visual studio para espacios ¿Qué queremos hacer por cada una de las temperaturas? Bueno, queremos imprimir la forma redonda de temperatura. Así como así, guarda, ejecuta, y esta es la salida. Así que en solo dos líneas de código, somos capaces de ejecutar algunos comandos para todos los elementos de una matriz, que es una lista en este caso, pero también puede ser una cadena. Por ejemplo, para carta en hola imprimir carta. Y hola está impreso ahí fuera. Y claro, puedes hacer lo que quieras ahí. Título, consigue el primer ítem, que es una letra. Entonces la carta estará así en mayúscula. Entonces déjame ir una vez más a través estas dos líneas para explicarles lo que significan. Entonces, lo que hace el bucle es para la temperatura en las temperaturas del Monte, entonces estás creando una variable, y lo que hace el bucle es que pasa por todos estos elementos uno por uno con bucles. Entonces en la primera iteración, la temperatura será igual, por lo que la variable será igual a 9.1 Por lo tanto, la función de redondeo redondeará 9.1 e imprimirla aquí. Y si aquí hay más líneas, por ejemplo, print, done. Si haces eso, ya ves, si hay otra línea más, como después de las nueve, esta línea se ejecuta, así obtienes la cuerda hecha impresa. Si hay más líneas, esas líneas serán ejecutadas. Si no hay más líneas, entonces la ejecución va nuevo en la parte superior del bucle cuatro, y el bucle obtiene el segundo elemento esta vez. Por lo que la temperatura esta vez será igual a 8.8. Y vuelve a pasar lo mismo, redondearlo, imprimirlo. D también se imprime, pasa a la siguiente línea, 7.6, y así sucesivamente. Y luego después del 7.6, el bucle intenta ver si hay más elementos en esta matriz. Si no hay más ítems, lo que sucede es que este bloque sangrado, la ejecución de este bloque termina y Python pasa a las siguientes líneas para ejecutar lo que queda en el script 45. Cómo hacer un bucle en un diccionario +: Vías que recorrer una lista es sencillo. Simplemente lo haces así. No obstante, si tienes un diccionario, es un poco más complejo. Nuevamente, haces cuatro, escoges un nombre de variable en el diccionario, quieres iterar, pero aquí quieres especificar lo que quieres iterar ¿Quieres iterar sobre elementos, claves o valores? Entonces, si quieres iterar sobre los elementos, aplicarías esos elementos allí No olvides la columna e imprime. Genial. A ver qué pasa. Entonces obtienes estos artículos impresos como tupla. Estas son tuplas. Entonces la clave y el valor para cada iteración. Si en su lugar querías las claves, solo escribes claves ahí y si querías los valores, solo escribes esos valores y obtienes los valores. Así es como se itera sobre diccionarios. 46. Cómo y por qué usar bucles While: Entonces aprendes que un bucle de cuatro itera a través de un contenedor, que podría ser una lista o una cadena o una tupla, y el bucle terminará cuando se agote el contenedor Entonces, por ejemplo, imprime uno, dos y tres. Y cuando no hay más artículos, el bucle termina. Entonces un bucle de cuatro se ejecuta hasta que se agota un contenedor, y un while eloop un bucle de cable se ejecuta siempre y cuando esta condición sea cierta, déjame ejecutarlo y ver qué va a pasar Entonces verás que el 11 se está imprimiendo todo el tiempo. Entonces, si me desplazo hasta aquí, no voy a poder encontrar dónde estaba el punto de partida porque ahora hay 1 millón de los que se están imprimiendo por ahí cada fracción de segundo. Entonces, lo que está pasando aquí es que un bucle Y Y es una palabra clave, y luego eso es seguido por una condición. En este caso, la condición es que A sea mayor que cero, lo cual es cierto. Entonces A es en realidad tres, eso significa que esta condición es cierta. Y mientras esta condición sea cierta, ésta se imprimirá. Entonces, bajo el bucle Wile, puedes tener tantas operaciones de acciones como quieras Por ejemplo, permítanme interrumpir esto con Control C en su terminal, y luego agregar otra línea aquí, imprimir dos, guardar, ejecutar. Entonces uno, dos, uno, dos, uno, 21, dos se está imprimiendo. Bien, voy a interrumpir eso. Ahora bien, la tasa con la que se están imprimiendo estos números depende de la velocidad de su procesador de computadora. Entonces, cuanto más rápido sea tu procesador, más rápido obtendrás las acciones aquí, estas operaciones se están ejecutando. Ahora, por supuesto, esto siempre será cierto para siempre porque aquí es solo una declaración estática de una variable, así que nadie la está cambiando aquí. Por lo tanto, la condición siempre será cierta. Puedes ver en el sitio Python cuando revisas algo tres es mayor que cero, te vuelves verdad. Entonces esto es básicamente salvaje verdadero y a veces lo verás así. Así que solo borra la primera línea. Salga de aquí, vuelva a ejecutar el código. Entonces nuevamente, sucede lo mismo porque la verdad siempre es verdad. Sin embargo, no es así como se utilizan los bucles salvajes en el mundo real. No tiene sentido verificar si true es true e imprimir algo todo el tiempo Entonces déjame seguir adelante y explicar wil loops en un mejor ejemplo en el siguiente video. 47. Bucles con entrada del usuario: Entonces teníamos un guión que comprueba si a es mayor que tres e imprime estas operaciones si eso es cierto. Ahora déjame seguir adelante y usar un ejemplo del mundo más real. Vamos a crear una variable aquí llamada nombre de usuario y darle un valor de una cadena vacía. Y aquí, vamos a comprobar si el nombre de usuario es diferente al nombre de usuario real, que supongamos que es Pi Pi. Ahora bien, si bien eso es cierto, queremos pedirle al usuario que ingrese un nombre de usuario. Entonces veamos qué va a pasar. Ingresa el nombre de usuario, obtuvimos el prompt aquí por la función de entrada. Pi. No, obtenemos nuevamente Ingresa el nombre de usuario. Pi Pi, quizá. No. Pi. Y así esta vez ya no nos llega un prompt. La ejecución del programa, así que déjame explicarte lo que pasó aquí. Declaramos la cadena vacía a nombre de usuario variable. Y luego aquí comprobamos si el valor de la variable username es diferente a Pi Pi. En este caso, es diferente porque esta es una cadena enter, y esta es Pi Pi. Por lo tanto, se producirá la primera iteración, que es esta de aquí Entonces en la primera iteración, estamos pidiendo al usuario que ingrese algunas entradas Esto es lo que pasó aquí en la primera iteración. Así que ingrese el nombre de usuario se le solicitó, y entramos en Pi. Pi ahora es una cadena que se asignará a nombre de usuario. Y el bucle pasa por la segunda iteración. Entonces mientras username es diferente a Pi Pi, lo cual es cierto en este caso, porque username por ahora, es Pi, la cadena Pi. Entonces Pi es diferente a Pipi. Por lo tanto, siga adelante y ejecute de nuevo el cuerpo del bucle de alambre. Cual es este de aquí. Así que pide una vez más el nombre de usuario al usuario. Entonces nombre de usuario, el usuario ingresa Pi P esta vez. El bucle vuelve a pasar por la cabeza por el inicio, y comprueba si Pi P es diferente a Pipi Eso es cierto, vuelve a obtener el nombre de usuario. En este caso, tenemos a Pi Pi. Entonces el nombre de usuario es Pipi ahora. El loop vuelve a ir mientras username es diferente a Pi Pi, en este caso, eso no es cierto porque en este caso, el nombre de usuario es igual a Pi Pi. Así Pi Pi. ¿Es diferente a Pi Pi? No, eso es falso. Entonces en la tercera iteración, esto será igual a false, y es entonces cuando termina el bucle Así que cuatro bucles terminan cuando el contenedor está agotado y uno termina cuando la condición es falsa. 48. Bucles duros, pausas y continuaciones +: En el video anterior, construimos este código. El código va así. Asignamos la cadena vacía a la variable username. Luego construimos un bucle de alambre que verifica si esta condición es verdadera. Si la condición de que nombre de usuario es diferente de Pi Pi, si username es diferente de Pi Pi, esto va a ser ejecutado. En la primera iteración, username es realmente diferente de Pipi porque username es una cadena vacía Por lo tanto, esto va a ser ejecutado. El programa pide el nombre de usuario. Si la entrada es A, por ejemplo, A se asignará al nombre de usuario y luego se inicia la segunda iteración, así mientras que A es diferente de Pi Pi, lo cual es verdadero Esto va a ser ejecutado de nuevo. Por eso volvemos a recibir este aviso aquí. Si ingresas Pi Pi, el bucle termina porque en la tercera iteración, Pipi no es diferente de Pipi por lo que esto ya no ocurrirá Ahora hay una manera diferente de hacer esto usando una sentencia break en lugar de hacer lo anterior, déjame hacerlo de otra manera, nuevamente, usando el bucle Wile Pero esta vez, se quiere comprobar si true, mientras true, que siempre es true, así el loop siempre se ejecutará hasta que lo rompamos. Entonces si bien es cierto, quieres pedir el nombre de usuario. Entrada, Ingresa nombre de usuario. Ahora, queremos crear un condicional aquí para verificar dentro del bucle Wile Yo nombre de usuario es Pip Pi, romper el bucle, si no, Continuar Veamos qué nos va a dar esto. Python tres, B que Pi. Ese es el guión del lado derecho. Ingresa el nombre de usuario. Hm, no, no. ¿Pippi? Sí. Déjame intentarlo de nuevo. Si ingresas a Pi Pi de inmediato, nuevamente, el bucle termina. Yo prefiero esto en realidad porque te da más control del flujo de trabajo. Entonces esto es lo que pasa aquí. Si bien cierto, que siempre es cierto. Entonces la primera iteración ocurre porque true es true, y pedimos el nombre de usuario en la primera iteración Entonces en la primera iteración aquí, el nombre de usuario era ASFD Entonces, si ASFD es igual a Pipe Pi, rompa el bucle. Ese no es el caso porque ASFD es diferente a pipi. Por lo tanto, esto no ocurrirá porque esta condición es falsa. Else será ejecutado. Continuar. Ahora, lo que sigue hace es que vuelve a mover el control encima del bucle. Así es como usas break y continúas en loop while. Ambas formas son correctas, pero sí me parece esto más legible. 49. Construir un programa en Python: Hola, bienvenidos de nuevo en esta nueva sección. En caso de que haya lagunas en tu conocimiento de Python hasta el momento con respecto a los conceptos básicos de Python que has aprendido a lo largo de estas secciones, entonces en esta sección, estoy tratando de llenar esos vacíos para que sepas lo que está pasando. Entonces lo haremos juntando todas las piezas creando una app más grande con los bloques de código que aprendiste para que todo empiece a tener más sentido y sepas cómo hacer programas del mundo real. Entonces este es el primer paso para hacer programas del mundo real. Y este no es realmente un programa del mundo real porque vamos a hacer algunos ejemplos más del mundo real en las próximas secciones. Entonces esto es solo para asegurarte de que aprendiste bien los conceptos básicos de Python. Entonces comencemos con el siguiente video. Te veré ahí. 50. Declaración de problemas en Python: Hola, es Arditi tu instructora. Si sigues los videos anteriores del curso, eso significa que aprendes los fundamentos de Python, y eso fue variables, tipos de datos, funciones, condicionales, bucles y entrada del usuario Ese es el núcleo de Python. Sea cual sea la aplicación que construyas, ya sea un script de ciencia de datos o una aplicación web o algo que automatice tus tareas diarias, casi siempre vas a necesitar todos esos fundamentos Antes de ir más allá a las características más avanzadas de Python en esta sección, tomemos un tiempo y meditemos en lo que aprendimos Por meditación, lo que quiero decir es pensar un poco de estos fundamentos que aprendiste Y la mejor manera de hacerlo es crear un programa que utilice todas esas características centrales de Python. Sin perder más tiempo, permítame demostrarle el programa que vamos a construir. He guardado el código en un guión. No voy a mostrarte el código enseguida. Te voy a mostrar la salida. Entonces cuando ejecuto el código, me sale un mensaje impreso, di algo. Entonces es un prompt que está pidiendo la entrada del usuario. Digamos que hoy hace buen tiempo. Ingresa al programa pide de nuevo entrada. ¿Cómo es el clima? Ahí sólo hay algunas nubes aquí. Enter y ahora si quieres terminar este programa, quieres presionar la diagonal inversa, presionar Enter, y esta es la salida Lo que es este programa es que te pide insumos. Ingresas la entrada una y otra vez y tan pronto como ingreses termina con una diagonal inversa, Fin de la diagonal inversa, el programa terminará, y dará salida a las frases que ingresaste en mayúscula Entonces la primera letra está en mayúscula, y se le agrega un punto a este tipo de oraciones, y un signo de interrogación si esa es una pregunta como esta de aquí Y lo mismo para esto con un periodo. Y esta es nuestra cadena secreta. Entonces es una diagonal inversa d. Cuando el programa obtiene esa cadena, eso significa que es hora de terminar el programa y obtener el resultado Entonces esta no es una de las diez aplicaciones del mundo real que prometo construir en este curso. La primera aplicación viene más adelante en el curso, pero esto es sólo para practicar lo que aprendiste hasta el momento. Entonces a pesar de que es un programa inútil, obviamente, quién va a necesitar esto, pero te va a ayudar mucho saber cómo usar las condiciones y funciones y loops. Así que por favor haz esto después de que termine este video, lo que me gustaría que hicieras es tomarte tiempo y pensar cómo puedes resolver, cómo puedes codificar este programa. Ahora ya conoces la salida. Intenta pensar y tal vez intenta escribir algún código. ¿Por qué no? No espero que resuelvas esto en realidad. Pero aún así, si te pones en modo de resolución de problemas, y luego cuando veas mi solución en los siguientes videos, porque te voy a llevar a través del código paso a paso, cómo construir esto. Entonces vas a tener un momento aha. Y ahí es cuando memorizas mejor las cosas porque en tu mente, eso era algo que necesitabas saber cuando intentas entender cómo puedes hacerlo Y luego ves cómo se hace, y luego lo aprendes mejor. Entonces sí, te hablaré en los próximos videos. 51. Abordar el problema: Genial. Sigamos adelante y construyamos este programa ahora. Entonces echemos otro vistazo a la salida porque cuando construyes un programa, quieres tener una visión muy clara de cómo será la salida, y luego tratar de dividir la gran tarea en tareas más pequeñas. Entonces, por ejemplo, digamos, este programa está pidiendo entradas de usuario una y otra vez. Y está consiguiendo algunas cadenas en este formato de fila, sin punto con una letra minúscula al principio. Y entonces si el usuario ingresa la diagonal inversa d, el programa conoce esa cadena y devuelve las salidas Entonces, lo que está haciendo el programa es capitalizar estas cadenas Entonces la primera letra está en mayúscula, y es agregar un punto o signo de interrogación Ahora, ya ves esta es una lista de frases aquí de oraciones. Pero como te dije tratas de dividir la tarea en tareas más pequeñas. Así que trata de dividir la salida en trozos más pequeños de salida. En este caso, no pienses en cómo generar esta lista, sino pensar en cómo lograr el mínimo resultado viable. En este caso, así es como obtener una cadena de fila como esta aquí y cómo convertirla en esta cadena. Y la mejor manera de hacerlo es usando una función para definir tu propia función que obtiene esta cadena y produce esta aquí. Entonces lo primero es crear una función. Hagámoslo en el siguiente video. 52. Cómo crear la función de maker: Entonces comencemos creando una función que convierta tipo de cadenas en esta forma. Definir llamemos a este creador de oraciones. Por lo que hace oraciones fuera de cadenas de fila. Llamemos a las cadenas frases. Frase. Entonces se pone una frase y primero, quieres poner en mayúscula esa frase, ¿verdad Entonces tal vez cree una variable dentro de esa función, llámela en mayúscula o donde quiera, y diga frase y use el método mayúscula Y mientras tanto, puedes usar tu shell interactivo Python para probar métodos para ver cómo funcionan mientras tú al mismo tiempo, creas una función en tu editor. Entonces, por ejemplo, digamos, quiero capitalizar esta cadena En primer lugar, me gustaría probar cómo funciona el método capitalizado Entonces ahora estoy seguro de que pone mayúscula la primera letra, así que está bien No, queremos agregar para concatenar un punto o un signo de interrogación a estas frases, Pero eso depende. Y entonces estamos hablando de una condición aquí. El programa tiene que tomar la decisión de poner un punto o un signo de interrogación al final de la frase. Entonces sigamos adelante y construyamos la condición. Si frase. Entonces, ¿cómo podemos diferenciar entre preguntas y oraciones simples que terminan con un punto? Bueno, puede haber diferentes formas ahí, así que eso depende del programador y lo sofisticado que quieras hacer eso. Pero mantengámoslo simple. Y digamos que las preguntas son todas aquellas que comienzan con unas palabras interrogativas como cómo, por qué y qué Y puedes comprobarlo con digamos que tienes una frase, como, ¿cómo estás de nuevo? Se puede utilizar el método start with, que obtiene una tupla como entrada Entonces una tupla y dentro del toole, puedes tener algunas cadenas que estás comprobando si la oración comienza con alguna de estas cadenas dentro de esta Entonces digamos cómo, ¿qué? Y por qué. Entonces eso volverá cierto porque cómo estás comienza con una de estas cadenas. Otro escenario, como, es un buen clima, te vas a quedar falso. Entonces podemos hacer uso de eso y decir si la frase empieza con ¿Cómo? ¿Qué? ¿Y por qué? Se puede hacer eso, o incluso mejor sería conseguir esta tupla y guardarla en un muy bien Digamos interrogativos y ponlos ahí. Entonces entonces aquí solo pones la variable, y eso hará que el código sea más legible. Entonces, si la frase comienza con interrogativos, lo que queremos hacer en ese caso es construir una cadena Entonces digamos que return la función devolverá esta cadena. Entonces eso está en mayúscula. Así que en mayúscula será la versión en mayúscula de la frase que el usuario ingrese, y luego queremos agregar a eso un signo de interrogación así como Entonces eso será reemplazado por mayúscula por esa cadena, y eso agregará un signo de interrogación a eso Entonces eso sucederá si la frase comienza con alguno de los interrogatorios si no regresan En este caso, devolveremos una frase con un punto con un punto con un punto. Nuevamente, capitalizar es lo que ponemos aquí. Permítanme demostrar hasta ahora lo que tenemos. Hacedor de sentencias. Entonces queremos ejecutar la función, ¿no? Con una palabra, con una frase. ¿Cómo estás? Guardar, ejecutar. Y así obtenemos la sentencia correctamente. ¿Cómo estás? Eso es. Ahora tenemos una función que hace algo y lo hace bien. Pensemos ahora en los otros aspectos de un programa en el siguiente video. 53. Construir el bucle: En el video anterior, construimos aquí esta función, que obtiene una frase como entrada, así una cadena, y si ejecutas la función, devolverá esa versión de la cadena. Ahora bien, la salida del programa que estás construyendo en esta sección va a pedir estas frases una y otra vez en forma de entrada del usuario. Entonces estamos hablando de obtener la entrada del usuario por parte del usuario. Y como eso está sucediendo, repetidas ocasiones, tenemos una pista aquí de que estamos hablando de un bucle. Y como este bucle, así que cuando el usuario ingresa la diagonal inversa termina, el bucle termina con esa cadena Eso significa que estamos hablando de un bucle condicional, y eso nos hace pensar en bucles wile porque los bucles wile funcionan sobre una base de condiciones Entonces digamos que el bucle Wile se ejecutará todo el tiempo, por lo que solicitará la entrada del usuario Entrada, di algo, una columna y haz algo de espacio ahí solo para decoración. Entonces, ¿qué pasa si el usuario ingresa alguna entrada? Hm. Bueno, primero, queremos verificar esa entrada si esa entrada de usuario es en realidad la cadena especial. Si ese es el caso, queremos romper el bucle. De lo contrario. ¿Qué queremos hacer? ¿De otra manera? Hm. Entonces viste esas frases ahí. Parecían una lista. Entonces fueron varios de ellos. Eso significa que estamos hablando de tener un montón de artículos. Y cuando piensas en muchos artículos, piensas en lista. Entonces tal vez queremos almacenar esas frases que el usuario ingresa en una lista. ¿Cómo podemos hacer eso? Bueno, podemos hacerlo comenzando con una lista vacía fuera del bucle. Entonces Python ejecutará la definición de la función. Esto ya no lo necesitamos porque solo lo usamos cuando probamos la función. Entonces, una vez que Python lee la definición de la función, no estamos llamando a la función aquí. Vamos a crear una lista vacía y luego iniciar el bucle. Se le pedirá al usuario un mensaje. Si una cadena que ingresa el usuario es esta, vamos a romper todo. Entonces el bucle terminará, de lo contrario, si esa cadena no es lo que el usuario ingresó, de lo contrario, queremos anexar la cadena de usuario, así que el usuario ingresa en la lista de resultados Entonces al final del bucle, tan involuntaria aquí, esto es después de que termina el bucle, lo que ocurre sólo cuando ocurre el break Entonces cuando el usuario ingresa a esto, después de que termine el bucle, vamos a tener una lista con muchos datos Así que imprime los resultados. ¿Cómo estás? Si es bueno y y y esto es lo que obtuvimos. Bien, lo sé. Estas son las cadenas que el usuario ingresó. Entonces, ¿cómo podemos obtener las cadenas reales? Bueno, eso es muy fácil. Aquí estamos agregando a la lista las cadenas de fila que el usuario ingresó Pero tenemos una función que puede convertir esas cadenas en oraciones. Usemos esa función. Vamos a anexar la salida de la función Para obtener la salida, es necesario llamar a la función. Para llamar a la función, necesita una entrada para la función. La entrada aquí es la entrada del usuario. Así como así, ejecutar de nuevo. Y obtuvimos esta salida como esperábamos. Por lo que estamos haciendo un buen progreso. Sin embargo, aquí no queremos un mínimo de salida. Solo queremos una salida de cadena sin esos corchetes. Entonces, ¿cómo podemos realmente fusionar o concatenar todas estas cadenas para hacer un solo texto como una Hagámoslo en el siguiente video. 54. Haz que el resultado sea fácil de usar: Entonces, para concalar todas las cadenas en una sola cadena, puede usar el método join de Entonces este es un método de cadenas. Esto es una cadena aquí. Por ejemplo, déjame poner esta cuerda. Es sólo un guión, pero sigue siendo una cuerda. Este método conjunto obtiene una lista como entrada. ¿Cómo estás? Bien, bien. Entonces esa es una lista de cadenas. Si ejecutas eso, estos elementos de la lista van a estar unidos por esta cadena aquí que declaras aquí. Entonces, si agregas más para que quede más claro, entonces vas a obtener un guión uniendo todas estas cadenas, estos elementos de la lista, el primer ítem, el segundo ítem, el tercer ítem. Podemos hacer uso de eso aquí diciendo, únete a la lista de resultados. Guardar que ejecutar. El clima es bueno y entonces ¿cómo estás? ¿El clima es bueno? Aquí tenemos un pequeño problema. Probablemente necesitamos un espacio entre esas cuerdas. Entonces podemos hacerlo muy fácilmente. Simplemente puedes poner un espacio en la cadena y luego ejecutar de nuevo. Y esos son los resultados que esperábamos para nuestro programa. Entonces así es como haces este programa en esta sección. Usted define una función encima de su guión que hace algo y lo hace muy bien. Después iteras, haces un bucle. Le pides entrada al usuario en cada iteración. Inmediatamente verifique si la entrada era la cadena. No desea agregar primero, y luego verificar si la entrada del usuario fue igual a esta Entonces no quieres tener esto como la primera condición porque si agregas eso, eso significa que si el usuario ingresa aquí, extremo de la diagonal inversa, y luego de eso, tuviste los resultados que anexan, esa cadena final de la diagonal inversa agregará Eso no quieres. Por lo tanto, es necesario verificar inmediatamente si la cadena es la diagonal inversa d y romper el programa si ese es el caso, de lo contrario, haga esto Así que almacene la salida del creador de oraciones en la lista de resultados. Entonces finalmente, solo concatenar los ítems de esa lista e imprimir los resultados, que es este de aquí Espero que este programa te haya sido útil y hayas aprendido algo como armar piezas. En los próximos videos, vamos a aprender algunas cosas más avanzadas sobre Python, y después de eso, vamos a pasar por la primera aplicación del mundo real. A la siguiente aplicación después de eso y la siguiente, y así vas a tener diez aplicaciones. Y sé que si te tomas esas aplicaciones en serio, vas a ser un buen programador. Deseo que sigas disfrutando de mis enseñanzas en los próximos videos. 55. Introducción a la comprensión de listas: Hola, bienvenido de nuevo. En esta sección, aprendes sobre las comprensiones de listas Ahora, las comprensiones de listas son similares a cuatro bucles. La principal diferencia es que en una comprensión de lista, se escribe el código en una sola línea Y con cuatro bucles, tienes múltiples líneas. Y también, las comprensiones de listas son un caso especial de cuatro bucles Se utilizan cuando se quiere construir una lista. Entonces, una comprensión de lista es un bucle que construye una lista. Se puede construir una lista también con un bucle de cuatro, pero como dije, las comprensiones de listas son solo una línea Así que eso hace que el código sea más elegante, más pitónico. Entonces aprendamos sobre las comprensiones de listas en esta sección usando ejemplos, ver 56. Una simple comprensión de una lista: A lo largo de mi experiencia trabajando con grandes conjuntos de datos, he notado algunas técnicas que utilizan los institutos de recolección de datos para ahorrar almacenamiento y hacer que sus datos tengan menos espacio en los discos de computadora. Una técnica común es no usar decimales. Por ejemplo, si buscas datos de temperatura, no verás las temperaturas reales que digamos que estas son Celsius, no las verás así, pero las verás sin los puntos porque eso ahorrará almacenamiento en los servidores. Entonces un carácter menos, eso significa algunos bytes menos. Entonces tu deber como programador es dividir realmente todos esos valores por diez para que obtengas los datos reales. Entonces digamos que estos datos estaban en algunos archivos de texto, y abrimos estos datos con Python, y el curso realmente cubre cómo administrar cómo abrir archivos de texto en Python. Pero saltemos esa parte por ahora. Entonces digamos que los tenemos cargados como lista aquí. Ahora queremos dividir de hecho por diez, cualquiera de ellos. Entonces, ¿cómo se hace eso? Bueno, una técnica es iterar sobre los TAM. Entonces, para temp en temps, y en cada iteración, quieres hacer Temp dividido por diez Pero, ¿dónde almacenamos esta temperatura dividida por diez? Bueno, podemos almacenarlo en una nueva lista. Digamos, nuevas temperaturas. Esa es una lista vacía por ahora. Entonces el bucle iterará a través esta lista y en cada iteración, vamos a agregar este valor a los nuevos Así que añade este valor. Eso se ve bien. Y luego imprimir nuevos TEM. Déjenme seguir adelante y ejecutarlo. Entonces esta es la salida deseada. Ahora bien, eso es muy correcto, pero hay una manera más clara de hacerlo en una sola línea de código Python Y eso es mediante el uso las comprensiones de listas. Va así. No tienes que crear una lista vacía porque una lista se generará dinámicamente, dirías, Temp dividido por diez, cuatro temp en temps Imprime nuevas temperaturas para ver lo que obtenemos, ejecutamos y obtienes exactamente la misma salida Entonces esa es una comprensión de lista. Es una forma de construir una lista sin tener que crear un bucle de cuatro, un bucle estándar de cuatro porque en realidad tenemos un bucle cuatro en línea aquí. Entonces lo que está pasando aquí es que tenemos una iteración aquí y en cada iteración, vamos a almacenar este valor en la lista en la nueva lista de TEMS Entonces esto es como decir la temperatura de la tienda dividida por diez, pero Python dirá: Bien, pero ¿qué es TEM? Es una nueva variable. Nosotros no lo hemos definido en ningún lado. Y luego decimos, Bueno, para temp en TEM, temp es una variable de TEM. Entonces así es como se crea una lista con estos valores para cada uno de los valores de TAMS Esa es una comprensión de lista. 57. Comprensión de listas con una condicional si: Ahora bien, si has trabajado con observaciones como observaciones meteorológicas, por ejemplo, temperaturas, podrías haber notado que tienes este tipo de valores a veces en esos datos, lo que significa que no hubo ningún valor, ningún valor válido detectado para esa observación, y las organizaciones usan ese valor especial para significar que no hay datos. Entonces, si quisiéramos usar una lista de comprensión donde dividiéramos por diez todos estos valores, queremos tener cuidado de no dividir este valor por diez Queremos ignorar eso. Para ello, necesitamos una I condicional dentro comprensión de la lista. Podemos hacerlo así. Así que crea una nueva variable donde almacenarás la nueva lista. Y nuevamente, digamos temp dividido por diez para temp en temps Si temp es diferente, por ejemplo, el menos 9999 Imprime nuevos TEm, ejecutamos en el terminal y obtenemos el resultado esperado. Entonces esto es igual que el bucle simple que vimos en el video anterior con la adición del condicional I. Entonces eso es condicional. Estamos comprobando si la temperatura es diferente a menos 9999. 58. Comprensión de listas con un condicional "si-else" +: Anteriormente, construimos esta comprensión de lista, que itera sobre esta lista y divide por diez cada elemento de esa lista, e ignora solo si temp es diferente Entonces, ¿qué pasa si temp es igual a ese número? Bueno, el bucle, la comprensión de la lista ignorará ese valor como viste en la salida Entonces esa fue la salida. Entonces, ¿y si quieres poner otro valor en lugar de eso? Digamos que quieres poner cero en lugar de ese número negativo. En ese caso, si crees que puedes simplemente hacer se aquí, cero, intentas esto, estarías equivocado porque eso producirá un error de sintaxis. Cuando tienes un Is dentro de la comprensión de la lista, el orden de los componentes es un poco diferente Hay que conseguir los cuatro temp en temps, así que el loop tiene que ser después del condicional, así como así Si ejecutas eso, vas a obtener los resultados esperados. Entonces ves el cero ahí en vez de menos 9999. Entonces la comprensión de listas esta vez va así. Dame temp dividido por diez, solo si temp es diferente a este número, lo contrario, dame cero para temp en temps Así que recuerda siempre que si tienes que hacer un Is dentro de la comprensión de la lista, el bucle for va al final así 59. Más sobre las funciones: Bienvenido de nuevo a una nueva sección. Aprendes más sobre las funciones a lo largo de estos videos. aprendiste a definir una función y a llamarla previamente en el curso. Pero aquí, aprendes algunos conceptos más avanzados sobre las funciones, y realmente, realmente necesitas aprender sobre las funciones porque son algunos bloques de código muy fundamentales. Entonces escribes tus programas usando funciones que hacen ciertas cosas. Entonces aprendamos más sobre las funciones. Nos vemos en el siguiente video. 60. Funciones con múltiples argumentos: Tal vez recuerdes la función len y la función is instance. La función len toma solo un argumento y la postura te funciona así que toma dos argumentos. También puedes verlo en la documentación de ayuda. Obj, ese es el único argumento que lleva la longitud. Y si miras la postura, obtendrá obj y clase o tupla Entonces algunas funciones necesitan un argumento, otras necesitan dos. Ahora, estas dos funciones fueron construidas en funciones de Python. Entonces el equipo de desarrolladores de Python diseñó estas funciones. Entonces, ¿cómo podemos hacer nuestras propias funciones con múltiples argumentos? Bastante fácil. Digamos que queremos que una función de área que calcule el área de un rectángulo para tener más de un argumento, solo necesitas separar los parámetros con una coma Entonces parámetro y argumento. Un parámetro es lo que nos referimos a estas variables cuando estamos definiendo la función, y cuando llamamos a la función como aquí, nos referimos a ellas como argumentos en la función call site, por así decirlo. Así regresa A veces B que devolverá el área de un rectángulo. Y claro, cuando llamas a la función, solo pasas valores para esos argumentos. Y obtienes el valor de salida correctamente. 61. Parámetros predeterminados y no predeterminados, palabras clave y argumentos no clave: En Python, los argumentos pueden ser principalmente de dos tipos. Tenemos argumentos que no son palabras clave y tenemos argumentos de palabras clave. Estos dos aquí son argumentos que no son palabras clave. No tienen la palabra clave adherida a ellos. No obstante, si el caso fuera así, las cosas seguirían funcionando igual. Pero estos dos ahora se llamarían argumentos de palabra clave. Los argumentos que no son palabras clave, que es éste, dos, también se conocen como argumentos posicionales Se llaman argumentos posicionales porque la forma en que comunicas estos dos argumentos a la definición de función se basa en la posición Entonces la primera posición, cuatro va para A y la segunda cinco va para B. Entonces argumentos posicionales y no de palabras clave es lo mismo si se tratara de argumentos de palabras clave La posición en realidad no importa. Entonces puedes pasar el valor de B como primer argumento si quieres, y cuatro irán a B y cinco irán a A. Así que mientras los pases así, argumentos de palabras clave, la posición no importa, aún así obtendrías la misma salida. Ahora, también tenemos parámetros predeterminados, no parámetros de argumentos. Lo que eso significa es que un parámetro podría tener un valor predeterminado como ese, lo que significa que no necesario especificar el valor de ese argumento cuando llama a la función. Entonces asignamos cinco a A y B es seis por defecto. Por lo tanto, obtenemos 30. A no necesariamente tiene que ser un argumento de Kord. También puede ser un argumento no kurdo aquí en la llamada a la función, todavía obtienes la misma salida Por supuesto, también se le puede asignar un valor diferente a B. Así como así. Y por último, también puedes dejarlo así a argumentos que no sean palabras clave, y aún así obtienes la salida correctamente. Algo que debes saber es que un parámetro predeterminado no puede estar antes de parámetros no predeterminados. Si ejecutas eso, obtendrás un error. Dice que el argumento no predeterminado sigue al argumento predeterminado. Entonces no default sigue el argumento default, que es A. Y eso creo que es una muy buena información sobre argumentos y parámetros de función. 62. Funciones con un número arbitrario de argumentos no palabra clave: Algunas funciones en Python como la función len, obtienen solo un argumento. Si intentas pasar más de uno, devolverá un error diciendo que toma exactamente un argumento. Algunas otras funciones como instancia, toman exactamente dos argumentos. Dos, si intentas pasar tres argumentos o sólo uno, obtienes un error. Algunas otras funciones como print toman un número indefinido de argumentos, y usted vio cómo podemos definir tales funciones con solo uno o más argumentos, pero aún no he explicado cómo crear este tipo de funciones Vamos a crear uno. Definir, llamemos esta media para calcular la media de una serie de números. Así que imagina que esta era nuestra función. Queremos pasar tantos artículos como queramos. De hecho, creamos una función media antes, que podríamos llamar así, pero aún así obtuvo un solo argumento, así que era una lista como esa. Sigue siendo un objeto, un argumento. En este caso, no queremos pasar una lista. Queremos pasar tantos artículos como queramos. Entonces Min y luego lo que haces, usas asterisco luego arcos Esto puede ser cualquier cosa en realidad después del asterisco. Cualquier nombre de variable funcionaría, pero es una buena práctica porque cada programador usa arcos Entonces es bueno que uses arcos para que otros puedan leer tu código Y también te acostumbras a leer código de otros usando arcos todo el tiempo Ya sabes de lo que están hablando los demás. Ahora, déjame mostrarte algo antes de aplicar el algoritmo que calcula la media. Arcos de retorno. Veamos lo que conseguimos aquí. Ahora déjenme llamar a la función. Entonces uno, tres, también puedes pasar cuerdas, lo que quieras, así. Y lo que obtienes es en realidad un poste superior que contiene todos los artículos, todos los objetos que pasaste en la función carbón. Entonces eso en realidad es un polo superior. Entonces, ¿qué podemos hacer con una tupla donde podamos calcular la suma de arcos Entonces los arcos son una variable, no arcos asteriscos, divididos por la longitud de los arcos En este caso, se obtendría un error porque tenemos A ahí. Así que quita A de ahí e inténtalo de nuevo. A es una cadena, por lo que no tiene sentido tener el promedio de una cuerda. Así que acabamos de crear una función con un número arbitrario de argumentos de palabra clave conocidos solamente. Digo sólo porque aquí no se pueden tener argumentos de palabras clave. Ves X igual a tres no funcionaría aquí. Si quieres argumentos de palabras clave, entonces mira el siguiente video. 63. Funciones con un número arbitrario de argumentos de palabras clave +: Entonces esta función aquí que construimos en la conferencia anterior aceptó un número arbitrario de argumentos que no son palabras clave. Para los argumentos de palabra clave, hay que agregar otro asterisco al asterisco y luego pasar un nombre de variable, pero Kew arcs Así que por favor use eso aunque no tenga que hacerlo y luego vea qué es KeyWRC, que significa args de palabras clave Si intentas llamar a la función ahí, obtendremos un error porque se trata una función con un número arbitrario argumentos de palabra clave solamente. Por lo tanto, todos estos argumentos tienen que ser nombrados argumentos, argumentos palabras clave, teniendo la palabra clave, el nombre del argumento. B y C así y ejecutar y se obtiene un diccionario. El diccionario tendrá ítems donde cada clave será el nombre de los argumentos que usaste cuando llamaste a la función, y el valor será el valor de ese argumento. Las funciones con un número arbitrario de argumentos de palabra clave se usan más fácilmente que las funciones con un número arbitrario de argumentos que no son palabras clave, como la función print que te dije antes, donde puedes pasar tantos argumentos sin una palabra clave. Entonces ahí lo tienes. 64. Introducción al procesamiento de archivos: Has aprendido sobre diferentes tipos de datos que puedes usar en Python Por ejemplo, aprendiste que puedes tener cadenas y puedes tener listas y números y así sucesivamente. Y almacenamos estos tipos de datos en variable. Entonces una variable se asoció a una cadena, por ejemplo. El problema con esto es que estás almacenando datos dentro de tu programa Python. Si quieres realmente, realmente almacenar tiempo de punto, por ejemplo, quieres almacenar pronósticos meteorológicos, no quieres escribir esos valores de pronóstico en cadenas o en números en tu script PY de punto. Lo que quieres hacer en cambio es que quieres tener esos datos en archivos externos, por ejemplo, archivos de texto o archivos CRC, o más adelante, aprendes sobre bases de datos, cómo almacenar datos en bases de datos y obtener esos datos a través de Python y procesarlos en Python. Pero en esta sección, aprendes sobre cómo almacenar datos en archivos de texto y cómo obtener datos de archivos de texto, cómo crear archivos de texto con Python, cómo leer los datos de archivos de texto y procesarlos con Python. Entonces ese es un concepto muy, muy crucial de programación. Y entonces ese es un concepto avanzado, y lo aprendes en esta sección. Así que diviértete, y te veré en el siguiente video. 65. Procesamiento de archivos con Python: Aquí en mi escritorio, tengo un archivo de texto, flout dot TXT Si hago doble clic en él, se abrirá con uno de los editores de texto que tengo instalado en mi computadora. El editor de texto es un programa, y en este programa, puedo leer este archivo, así puedo leer estas líneas. Puedo escribir más líneas aquí, puedo copiar esto y pegar, multiplicarlas para tener muchas de estas líneas aquí en este archivo de texto, y puedo hacer todo esto con este programa editor de texto que por casualidad tengo aquí en mi computadora. Ahora podemos hacer lo mismo usando Python, lo que significa que podemos leer el archivo con Python, podemos escribir más contenido en ese archivo. Podemos multiplicar esto y en realidad podemos hacerlo de manera muy eficiente. Si tuviera que multiplicar esto, tenía que copiarlos y pegarlos mil veces tal vez. Pero con Python, puedes hacerlo muy fácilmente. Sigamos adelante y hagamos lo mismo con Python y comencemos con la lectura del archivo. Entonces, cómo leer un archivo con Python. Te lo voy a mostrar en el siguiente video. 66. Leer textos de un archivo +: Entonces así es como abres un archivo de texto con tu programa editor de texto favorito, y déjame mostrarte cómo hacer lo mismo con Python. Por supuesto, la experiencia es un poco diferente. No se trata de hacer doble clic en el archivo, se trata de escribir código. Entonces, cuando abres ese archivo con tu editor de texto, lo que sucede es que algún objeto se crea en tu memoria temporal de tu computadora en RAM. Entonces el archivo estaba en el disco duro. Cuando lo abres, se crea como algún tipo de objeto en la RAM. Lo mismo sucede con Python. En este caso, es posible que desee almacenar ese objeto, ese objeto de archivo que va a crear en Python. Es posible que desee almacenarlo en una variable. Llamémoslo mi expediente. La función open es lo que crea objetos de archivo. Y como es una función , obtendrá un argumento. Ahora bien, este archivo básico punto py está en el mismo directorio con el archivo fruit dot TXT. Por favor, descargue el archivo TXT de frutos punto, que se ve así. Déjame dividirlo aquí. Puedes arrastrar un archivo al costado aquí para tener dos ventanas en el editor de código de Visual Studio, pero puedes hacerlo incluso en otros editores, estoy seguro, si estás usando otros editores. Este archivo por ahora, déjalo estar en la misma carpeta con Basics punto py. Una vez que haces eso, entonces la entrada para esta función es la ruta al archivo. En este caso, ese sería fruit dot TXT, ya que el archivo fruits DTX está en el mismo directorio con Basics punto pi No, para leer el contenido de frutas DL TXT en tu editor de texto como lo hicimos gráficamente, se trata de hacer doble clic en el archivo, y luego ves el contenido en la interfaz del editor de texto. En Python, las cosas son un poco más tienen que ser un poco más explícitas. Hay que especificar lo que quiere hacer porque este archivo, acabamos de crear un objeto de archivo. Si ejecutamos eso, no va a pasar nada. Se va a crear un objeto en la memoria temporal y cuando finalice la ejecución del programa, el objeto se eliminará de la memoria. Al igual que cuando abres el archivo de texto con el editor de texto y luego lo cierras, objeto, el objeto archivo se elimina de la memoria temporal. Si quieres leer, lo que quizás quieras hacer es imprimir mi archivo. Ahora, mi archivo tiene un método de lectura. Este es el objeto file, que tiene un método de lectura. No toma ningún argumento, así que solo déjalo así, guarda, ejecuta, y aquí obtienes la salida del archivo. Así es como lees un archivo en Python. 67. Cursor de archivos: Ahora, algo que debes saber es el concepto de cursor. Lo que sucede aquí es que se crea un archivo, se crea un objeto de archivo, y luego cuando se aplican los métodos de lectura, antes de aplicar el método de lectura, el cursor se sitúa en el primer carácter del archivo de texto. Cuando aplicas el método de lectura, el cursor va al final del archivo de texto. Entonces ahora después de que se haya aplicado el método de lectura, el cursor se encuentra aquí. Si aplicas otra operación de lectura como esa, guarda, ejecuta. Lo que va a pasar es que a lo mejor esperabas que estas líneas se imprimieran dos veces. Lo que sucede en cambio es que se imprimen una vez, y luego esto es solo una cadena vacía porque el cursor después de la primera ejecución de lectura estaba en este punto y por debajo de este punto, no hay nada, así que ahí se obtiene esa cadena vacía. Lo que puedes hacer es si quieres imprimir el contenido muchas veces, lo que puedes hacer es guardar el contenido en una variable y luego imprimir el contenido tantas veces como desees y obtendrás la salida dos veces como puedes ver aquí. Eso es porque el método de lectura se ejecutó solo una vez aquí. Eso es algo que debes saber. 68. Cerrar un archivo: Cuando creas un objeto de archivo, se crea un objeto de archivo en la RAM y va a permanecer ahí hasta la ejecución de tu programa. Por lo tanto, podría ser una buena idea cerrar realmente el archivo que el archivo se elimine de la memoria una vez que haya terminado de procesar ese archivo. Por ejemplo, en este script, está creando el objeto file, y aquí está leyendo el contenido de ese objeto file y almacenándolo como una cadena. Entonces mi archivo Read genera una cadena, que representa el texto del archivo. Esa cadena se almacenará en esta variable de contenido. Entonces aquí he terminado de procesar el archivo, entonces puedo después de eso, solo estoy procesando la cadena que guardé en esta variable. Por lo tanto, tiene sentido aplicar mi archivo dot close. A pesar de que esto no es estrictamente obligatorio, pero es una buena idea usarlo. Entonces, si haces eso, seguirás teniendo la salida correcta. Algo que debes saber ahora es que si aplicas mi archivo que vuelve a leer después de haber cerrado el archivo, vas a obtener un error. Dice que esta operación se está realizando en un archivo cerrado, por lo que no se puede hacer eso. Entonces así es como crear un archivo y cerrarlo, pero hay una mejor manera de hacer todo eso. Te lo voy a mostrar en el siguiente video. 69. Abrir archivos con: Una mejor manera de hacer esto para crear el archivo, leer el contenido y cerrar el archivo es usar el administrador Con contactos. La forma en que lo haces es, de nuevo, usas la función open, que trabaja las mismas frutas TXT. Ahora, dices un myfile. Mi archivo es solo una variable, y luego hay que sangrar. Entonces lo que has hecho aquí es que has creado este myfile igual a frutos abiertos punto TXT, exactamente igual La diferencia aquí es que escribirás todo lo que tiene que ver con procesar ese objeto de archivo. Tendrás que escribir todo debajo esta línea sangrada debajo de esa línea como un bloque Eso hará que las cosas estén más organizadas. Entonces en este caso, lo que queremos hacerle al archivo es leerlo así. Una vez que hayas terminado, entonces simplemente cierras la sangría Por lo que las siguientes líneas estarán sin sangría como la línea de impresión. Mira lo que va a pasar aquí. Esa es la salida esperada del contenido impreso. Incluso si borras esto, para no confundirte, nuevo, obtienes la misma salida Entonces esta salida es en realidad de esta línea. Y cerrar el archivo no es necesario aquí porque el gestor de contexto With aplicará implícitamente el método close Por lo que su archivo se cerrará una vez que termine este bloque. Así que por favor usa el Con contact manager, y así es como lo haces. 70. Uso de diferentes rutas de archivo: Hasta el momento, nuestro PY básico y nuestro archivo TXT de punto de frutas estaban en el mismo directorio, en la misma carpeta que nos permitía escribir solo el nombre del archivo en el archivo PY básico. No obstante, si los frutos ese archivo TXT estaba, por ejemplo, dentro de este otro directorio, así que acabo de mover frutas TXT dentro de archivos. Fils es una carpeta que se encuentra en el mismo directorio con Conceptos básicos punto PY Entonces Basics eso es PY en la misma carpeta con scripts con archivos, y frutas dentro de archivos. En ese caso, si ejecutas el archivo básico PY, vas a obtener un error de archivo no encontrado. No hay tal archivo o directorio, frutas punto TXT. Y eso es cierto. No hay frutos DTXT en la carpeta donde lo básico Dt PY es así Lo que hay que hacer es especificar la ruta completa al archivo relativo al archivo relativo al punto básico PY que es archivos slash fruits punto TXT Ejecuta eso y las cosas van a funcionar. 71. Escribir texto en un archivo: Echemos un vistazo a la documentación de ayuda de open. Y verás que la función open recibe un montón de argumentos. Los dos primeros son los más importantes. Ya usamos file, que es la ruta al objeto file. Y para estos otros, usamos sus valores predeterminados, lo que significa que para los modos, usamos R, R significa leer. Por lo tanto, este código aquí es el mismo que este. Entonces obtienes la misma salida. ¿Cuáles deberías usar? Bueno, para hacer el código más simple y más corto, esto está bien. Para que el código sea más explícito en términos de fadability para que otros puedan ver que se trata de leer el código, entonces usarías De cualquier manera está bien. Ahora bien, ¿qué puedes usar para escribir? Para escribir, usarías W para escribir. Y déjame crear un nuevo archivo debajo de la carpeta de archivos. Llámalo verduras. Entonces un archivo de verduras no existe actualmente en mi carpeta de archivos. Será creado por la función open. Y luego en ese archivo vacío, vamos a escribir algo que Tomate. Por supuesto, la variable de contenido no tiene sentido aquí porque no estamos obteniendo algunos datos del archivo Sólo estamos escribiendo ahí. Entonces, mantengámoslo así, guárdalo. Ejecutar y una verdura, el archivo TXT ha sido creado en mi computadora con una cuerda de tomate ahí. Déjame ponerlo aquí. Entonces el método read busca un archivo existente. El método correcto crea un nuevo archivo, y debo advertirle que si el archivo existe, como en este caso, fruto que Tix está ahí Si ese es el caso, Python anulará el archivo existente. Entonces, si abres frutas DTixTi ahora, verás que tienes este nuevo contenido del Por lo que se descarta el contenido existente. ¿Cómo podemos escribir más líneas? Bueno, hay que usar la cadena especial de la diagonal hacia atrás N, que crea líneas de rotura Cebolla, ejecutar. Entonces esto es frutas TXT. Y obtienes estas tres líneas como esperábamos. Algo que debes saber es que puedes aplicar más de un método al archivo abierto. Escribamos ajo aquí. Ahora, intencionalmente, no hice algo que se suponía que debía hacer para mostrarte lo que pasa. Por lo que el galeico se puso inmediatamente después de la cebolla porque no había espacio ni un operador de N de barras traseras ahí. Si pongo un espacio aquí, tú, por supuesto, conseguirías un espacio entre la cebolla y el gaelico Pero lo que quieres en cambio es que quieres que después de cada línea que escribas, quieras una diagonal hacia atrás N. Y en ese caso, obtendrías la salida correcta Entonces ahora probablemente te estés preguntando, bueno, tengo esta fruta que Tixifle No quiero sobrescribirlo. ¿Cómo puedo realmente agregar otra línea debajo de estas líneas existentes? Te voy a mostrar cómo hacerlo en el siguiente video. 72. Cómo agregar texto a un archivo existente +: Bien, entonces tengo estos frutos que archivo CX aquí, que tiene estas cuatro líneas que no son frutas de todos modos, pero entiendes la idea. Es texto. Queremos agregar dos líneas más a estas frutas existentes que archivan CX. No sabemos qué hay en este momento. Si miras la documentación abierta y te desplazas hacia abajo, verás aquí que puedes pasar diferentes modos en este argumento aquí. Entonces, que ya usamos, usamos W, y luego tienes X. Si usas X, e intentas escribir digamos Okra Si ejecutas eso, va a decir que ese archivo existe. Entonces, a diferencia del modo W, que sobrescribe un archivo, X no anulará el archivo si el archivo existe Sin embargo, no puede anexar contenido a un archivo existente porque dice que el archivo existe Por lo tanto, saltamos al siguiente modo, que es A. Ves que ahí se agregó Okra, claro, con un pequeño problema porque aquí no había una línea de ladrillo en el archivo de texto existente Esa es alguna información que deberías saber, y si sabes que no hay una línea de ladrillo, entonces tendrías que dejarme decir este archivo de texto, entonces tendrías que agregar una línea de corte ahí para obtener la salida correcta. Cada vez que agregue una nueva línea, deberá agregar una línea de ladrillos al frente. Ahora bien, ¿qué tal leer ese contenido? Tal vez guardarlo en una variable e imprimir el contenido. ¿Funcionará? Yo no lo creo. Dice que no se soporta la operación. El archivo no es legible. Es A, que es para anexar. Si quieres escribir y leer al mismo tiempo, quieres agregar un plus. Así como así. Ejecutar. Obtienes una salida vacía. ¿Por qué? Por el cursor. Entonces lo que ha pasado es que cuando agregamos ahí la línea Oca, así que al principio, tú creaste el archivo aquí en este punto, el cursor está aquí, ¿ok? Después escribes el archivo. En esta línea, el cursor va al final del archivo. Entonces cuando lees ahora, lees lo que quede debajo de la última línea, que no es nada. Lo que puedes hacer es mi archivo, Sk, aplicar un método Sk para volver a poner el cursor en la posición cero. En ese caso, el cursor irá hasta el final. Volverá a ir a la posición cero con esta línea, y luego leerás todo desde ahí y hacia abajo para que obtengas la salida correcta. 73. Módulos incorporados en Python: Si sigues las secciones anteriores del curso, entonces has recorrido un largo camino. Entonces ya conoces los fundamentos de Python. Ya sabes resolver problemas fundamentales. Por ejemplo, digamos que querías el número de caracteres de la cadena. Entonces tienes métodos y tienes funciones que puedes usar. Entonces, para los métodos, puedes buscar con ciervos SDR, verías el montón de métodos aquí que podrían aplicarse a cadenas, y luego puedes ver funciones integradas en funciones Por ejemplo, los n métodos serían útiles aquí. Devolvería el número de caracteres para la cadena Pi Pi Pi, que es seis. Ahora, todos estos aquí. Entonces estas funciones y los métodos de cadena, están todos incorporados. Entonces estos son métodos y funciones que están escritos dentro del software Python que descargas e instalas desde python.org Ese software está escrito en lenguaje C. Por lo tanto, estos métodos y funciones también están escritos en lenguaje C. Y como ves, estos nombres aquí están disponibles de inmediato en tu intérprete de Python. Eso significa que están integrados. Están dentro de ese intérprete, y solo puedes llamarlos sin importarlos. Ahora bien, y si tuviéramos algunos otros problemas como, digamos, ya ves el guión aquí. Lo que está haciendo este guión es que es un bucle. Es un bucle while. Entonces si bien es cierto, lo que significa que va a correr para siempre. Entonces lo que hace es que está leyendo este archivo, vegetal dot TXT en el directorio de archivos, que pasa a estar en el mismo directorio con conceptos básicos punto pi. Entonces esa es la ruta del archivo. Y este archivo de texto contiene una cadena. Y así lo estoy leyendo bajo esta variable, y estoy imprimiendo el contenido aquí dentro. Entonces, si ejecuto este archivo, vas a obtener el contenido impreso cada fracción de segundo y que depende de segundo y que depende tu procesador de la velocidad del procesador de tu computadora. Ahora bien, ¿y si no queremos que esto suceda cada fracción de segundo? ¿Y si quieres leer el contenido cada 10 segundos? Déjame interrumpir esto con Control C. Pronto te darías cuenta de que no tienes ninguna función incorporada que haga eso que implemente algún tipo de métodos de suspensión en tu script. Entonces no hay ninguna función que puedas usar de inmediato. En ese caso, es posible que desee buscar módulos integrados. Para ello, por favor utilice esta sintaxis. Importar CS, que significa sistema y luego CS construido en nombres de módulos. Y aquí obtendrás una lista de módulos, módulos integrados, por lo que los módulos que se construyen de nuevo en el software Python. Así que vamos a usar uno de ellos tiempo. La forma en que lo usas es importando el nombre del módulo. Entonces otra vez, puedes usar DR para ver qué tienes para ese módulo. Por ejemplo, aquí verás que tenemos un método de sueño. Usa la ayuda para ver cómo usar ese método en particular. Entonces dice que obtiene el segundo como argumento. Así que vamos a probarlo. T eso es dormir. Digamos tres, uno, dos, tres, y entonces a qué hora ese sueño se desliza la ejecución del script por una cantidad particular de segundos, tres, en este caso Eso significa que podemos implementar eso en el script. Es una buena práctica importar módulos en la primera línea del script. Y luego usa ese módulo en tu script donde lo necesites. En este caso, lo que queremos hacer es, supongamos que esta verdura que es archivo TX se está generando en nuestro servidor cada 10 segundos. Entonces digamos que un software en el servidor está obteniendo estos datos de alguna parte, y está escribiendo un nuevo contenido cada 10 segundos. Por ejemplo, ahora es tomate, después va a ser ajo 10 segundos. Después de eso, sería cebolla y así sucesivamente. Así que estamos obteniendo nuevo contenido cada 10 segundos. Así que queremos imprimir el contenido del archivo, y luego tener el comprobante de ejecución durante 10 segundos. Ahora voy a guardar el script, ir a la línea de comandos, ejecutarlo. Entonces obtienes tomate enseguida. Ahora bien, si cambio esto a cebolla, digamos que el software lo cambió y guardo , haga clic en Guardar. La cebolla se imprimió ahí afuera después de 10 segundos. Si lo cambio a ajo, ahorra. Espera, espera unos segundos. El ajo está impreso por ahí. Entonces, cada 10 segundos, el script está recogiendo los datos de las verduras que CXC e imprimiéndolos en una línea de comandos Entonces Control C para interrumpirlo. Así es como se usa un módulo. Ahora, no todo está integrado en su software de intérprete Python. Algunas cosas, en realidad, muchas de ellas vienen en una forma diferente que voy a explicar en la siguiente conferencia. 74. Módulos estándar de Python: Anteriormente aprendiste que podías obtener una lista de módulos integrados en Python usando nombres de módulos integrados en C. Como ejemplo, usamos el módulo time, que congelaría la ejecución del script durante una cantidad determinada de segundos. Ahora, déjame mostrarte algo. Voy a ejecutar un script cebolla se imprimirá porque está ahí en las verduras que archivo CXT Sin embargo, si ahora elimino este archivo, verás que la próxima vez que el script verifique los archivos, las verduras puntean la ruta TXT. Entonces esa es una ruta de archivo. Se va a generar un archivo de error no encontrado error, no dicho archivo o directorio. Así que imagina que tenías este programa ejecutándose en un servidor 247 y por alguna razón, el software que estaba generando estos archivos, en algún momento, no genera el archivo, así que tu ejecución de script terminará y tal vez en un minuto, tu software comenzará a generar los archivos nuevamente, pero tu script de Python no se reanudará porque aquí obtuvo un error. Entonces, lo que queremos hacer queremos seguir ejecutando el script Python incluso cuando el archivo no esté en el directorio ahí. Para ello, queremos hacer uso del módulo OS. Importe OS, y notará que OS no se encuentra entre los módulos Python integrados. En efecto, OS es un módulo escrito en Python. Todos estos módulos están integrados, lo que significa que están escritos en lenguaje C dentro de la implementación del software Python. OS no es uno de ellos. Para saber dónde se hospeda el sistema operativo, puede usar el prefijo de SO. Ahí vas a obtener una ruta de directorio, que podría ser diferente dependiendo del sistema operativo que estés usando. Entonces, por favor navegue a ese directorio. Prefiero ir ahí directorio copiándolo sin los códigos. Así que copia todo sin el des, así. Ve a tu terminal de línea de comandos, y si estás en Windows, usa start y pega ahí el directorio, y luego presiona Enter. Si estás en Mac o Linux, usa Abrir en lugar de Iniciar y vuelve a pegar el directorio. Presiona Enter, eso abrirá tu Explorador o buscador de Windows, lo que sea que tengas para abrir carpetas. Para que la carpeta 3.7 que veas aquí y luego vaya a Lib haga doble clic. Después encuentra la carpeta, Python 3.7 o cualquier versión que tengas. Entonces Python tres señalan algo. Haga doble clic en él. Y aquí verás una serie de archivos Python punto pi. Todos estos son archivos Python. Todos estos son módulos estándar de Python, y OS está entre ellos ve a Oh aquí, haz doble clic en él o ábrelo con lo que sea que uses como editor de texto, y verás que esto es en realidad código Python. Asegúrate de cerrarlo antes de cambiarlo. Así que no cambies no modifiques los módulos estándar de Python. Entonces voy a cerrarlo y puedes usar DR realmente para ver qué tienes disponible para ese módulo. Entre ellos, por ejemplo, voy a usar el objeto path. Entonces con como ese camino, y Path tiene un método llamado existe. El método exist obtiene un argumento que debería ser una cadena, y se supone que es la ruta del archivo que desea verificar si existe en el directorio actual. Así que vamos a escribir la ruta del directorio al archivo, y me sale falso porque el archivo no estaba en el directorio actual. Si voy ahí y creo ese archivo dentro de la carpeta de archivos, así que ahora tengo una barra de archivos de verduras punto ruta de archivo TXT Si vuelvo a ejecutar eso, voy a ser verdad. Y podemos hacer uso de ese hecho en nuestro programa Python. Entonces lo que queremos hacer es antes abrir el archivo en modo real, queremos verificar si el archivo existe porque si no hacemos eso y el archivo no está ahí, esta línea aquí va a generar ese archivo no encontrado error. Entonces antes de hacer eso, queremos comprobar si Os ese camino que existe. Archivos de corte de verduras punto TXT. Y como esto es un condicional, queremos usar una columna ahí. Y después de eso, lo que sea que quieras hacer, tiene que ser sangrada Entonces con, va a estar debajo si esto también es parte del bloque W, así que sangra eso también Y luego s va dentro del bucle de alambre otra vez. Lo que quieres hacer bajo ls, bueno, a lo mejor queremos imprimir El archivo no existe. Y luego ten cuidado aquí. El deslizamiento de tiempo tiene que estar fuera del bloque IL porque se quiere ejecutarlo independientemente del bloque condicional, lo que significa que si el archivo existe, este va a ser ejecutado. Si el archivo no existe, éste va a ser ejecutado. Y después de que se ejecute cualquiera de estos, siempre, vamos a ejecutar ese desliz de tiempo. Entonces déjame guardar el guión y ejecutarlo. Y tenemos un error, OS no está definido. Me alegro de que esto se haya presentado porque los Módulos tienen que ser importados. De lo contrario, vas a obtener ese error de nombre porque OS, antes de ser usado aquí , no se importó, y no es una función o método incorporado como print que no necesitas importar. Por lo que su nombre no está disponible inmediatamente en el espacio de nombres. Vuelve a guardar el script, ejecutarlo y obtenemos una cadena vacía porque las verduras están actualmente vacías. Ahora bien, si voy y borro verduras así, espera un poco. Y nos imprimiremos esto. Si vuelve a crear el archivo, escribe algo ahí, guarda el archivo. No lo olvides, fingiendo que el software está generando este archivo Entonces ahí tienes a Gallic. Ahora puedo interrumpir la ejecución del script con Control C, y que son ambos módulos estándar de Python, y son exactamente los mismos, por lo que puedes usar JR con ellos. Entonces todas las reglas de Python se aplican a estos módulos. La única diferencia es que el tiempo está escrito en lenguaje C y está integrado dentro del software Python, y el sistema operativo viene como un script punto pi, y vino aquí cuando instalaste Python. Así que básicamente se copió en uno de tus directorios de computadora, y puedes importar esos todos esos módulos, módulos estándar en Python. Ahora, por supuesto, no todo viene con tu instalación de Python. Entonces las cosas que hay que instalar. Entonces te voy a mostrar eso en el siguiente video. 75. Módulos de terceros: En las conferencias anteriores, construimos un programa que recorre las verduras que archivan TXI cada 10 segundos e imprime su contenido Entonces los programas que se ejecutan aquí. Ahora, verduras dot TXT es solo un simple archivo de texto con algunos datos inútiles como el ajo y la cebolla. Qué pasa si tuviéramos algunos datos más del mundo real como los Temps subrayaron el archivo CSV Entonces este es un archivo CSV, que es básicamente un archivo de texto. Y tiene una estructura de múltiples columnas. Entonces cada columna tiene algunos datos. Ya ves aquí esto es un encabezado. Tiene dos columnas, SD una para la estación uno y SD dos para la estación dos. Entonces tenemos dos estaciones de observación meteorológica, y registraron estos datos, estas temperaturas. Digamos, estas son observaciones en un día. Esto es por la mañana y esto es más tarde en la tarde y en la noche. Entonces tenemos dos columnas. Nuestro deber ahora es leer este archivo cada 10 segundos, tal como lo estamos haciendo con verduras ese archivo TXT. Pero en lugar de imprimir su contenido, tenemos que imprimir el valor promedio de todos estos valores. Entonces deberíamos hacerlo cada 10 segundos. Bueno, normalmente, tendrías que hacer esto cada 24 horas porque tiene más sentido. Dado que estos datos son datos diarios, datos diarios de temperatura, se están cambiando todos los días. Tiene sentido imprimir el valor, el valor promedio cada 24 horas. Y por supuesto, puedes hacerlo fácilmente simplemente cambia el valor de 10 segundos a cualquier segundo que sea igual a 24 horas. Eso se puede calcular fácilmente. Pero por simplicidad aquí, solo usemos 10 segundos. Ahora bien, si bien podemos hacer esto usando el método open para cargar los datos en Python, eso cargaría los datos como una cadena. Entonces todo este texto se cargaría como una cadena en Python. Entonces tendríamos que aplicar algunas operaciones de procesamiento de cadenas para dividir todos estos valores y convertirlos a float. Pero eso sería como reinventar la rueda. Lo que estoy tratando de decir es que alguien más escribió algún código Python que hace esto muy fácilmente en solo una o dos líneas de código. Y los tipos que escribieron esto, lo han construido como una biblioteca de terceros. Así que al igual que usamos el tiempo y el sistema operativo importándolos dentro de Python, también podemos usar otra biblioteca para este caso para cargar estos datos en un bonito formato en Python. Déjame mostrarte cómo. El nombre de la biblioteca que conozco es Pandas, y Pandas no viene por defecto con Python Entonces, cuando instales Python, Pandas no estará ahí, pero puedes instalarlo con PIP PIP es otra biblioteca que viene instalada por defecto en Python, y se utiliza para instalar otras bibliotecas de terceros Un punto muy importante que quiero hacer es que el comando PIP puede variar entre diferentes sistemas operativos y diferentes instalaciones de Python Por ejemplo, si estás usando Python versión 3.8, es posible que tengas que escribir PIP 3.8 en lugar de solo PIP Si estás usando Python 3.9, tendrás que escribir PIP 3.9 Si estás usando Python 3.10, que es más reciente que 3.9, tienes que escribir PIP Entonces, para resumirlo, hay que usar sus propios comandos. Siempre que escribo PIP tres, tienes que usar tu propio PIP 3.8 o PIP 3.9, etcétera, etcétera, Entonces voy a usar Pip tres y luego hacer instalar pandas. Tenga en cuenta que no debe cambiar la parte de instalar pandas del comando Sólo debes cambiar la parte del PIP como te expliqué Bien, entonces Pandas es el nombre de la biblioteca que queremos instalar Entonces las barras se están llenando. Eso significa que la biblioteca Pandas se está instalando correctamente Genial. Ahora, sigamos adelante y usemos Pandas en nuestro guión aquí Importar pandas, igual que hicimos con otras bibliotecas. Entonces estos dos, esta era una biblioteca estándar. Está integrado dentro del intérprete de Python. Y esto es, de nuevo, es una biblioteca estándar, pero no está integrada, está escrita en Python. Este pandas, esto también está escrito en Python, y ahora se acaba de instalar en nuestros archivos de instalación de Python Déjame mostrarte dónde está ese pandas. Vamos a abrir una sesión de Python. Entonces si importas SIS y luego sys prefijo de punto eso te dará este directorio. Cualquiera que sea el directorio que tengas, copiarlo sin los códigos, y luego comienzas en Windows y pagas el directorio en Mac y Linux abierto y paga el directorio, presiona Enter, eso abrirá el directorio, vaya a Lib a Python. Y entonces OS, por ejemplo, estaba aquí, Os punto pi. Se trataba de bibliotecas estándar. Ahora, sea lo que sea que instales con PIP, va a estar dentro del directorio de paquetes del sitio, que está aquí abajo en alguna parte, sí Entonces pandas, esto es pandas. Acabamos de instalar pandas. En este caso, esto no es un módulo, sino un montón de módulos. Y esto se llama paquete. Cuando tienes varios módulos, eso se llama paquete. Pero todavía se puede referir a ella como una biblioteca. Por lo que una biblioteca es un nombre que se usa habitualmente para referirse tanto a módulos como a bibliotecas. Entonces codifica cuando usas Pandas, no hace ninguna diferencia Si es un módulo o es un montón de módulos, entonces un paquete. Entonces el código de Pandas está todo ahí, y podemos usar este código ahora en nuestro script Entonces déjame mostrarte en la próxima conferencia cómo usamos esta biblioteca de terceros Pandas 76. Un ejemplo de módulos de terceros: Entonces, sigamos adelante y leamos el contenido de este archivo con Pandas Una biblioteca de análisis de datos muy potente. Vamos a sumergirnos más adelante en los Pandas. Tenemos una sección dedicada a Pandas y tenemos aplicaciones donde vamos a usar mucho Pandas Pero por ahora, déjame darte una rápida demostración de cómo funcionan los pandas Asegúrate de importarlo. He inportado aquí, y luego mientras terminé, mantengamos esto condicional para verificar si el archivo está ahí En este caso, ese sería Temps hoy punto C SV. Y luego si el archivo existe, queremos cargar los datos en esta variable de datos. La forma en que lo hacemos es usando el método CSV leído de Pandas Y ahí va, lo adivinaste la ruta del archivo. Así. Entonces, si el archivo existe, lea los datos y luego imprima la media del punto de los datos. Entonces, este objeto tiene un método medio. Déjame mostrarte más adelante qué es este objeto. Pero por ahora, sigamos adelante y ejecutemos este guión. Entonces estamos obteniendo la media de cada una de las columnas. Esa es una media para la estación uno, y esa es una media para la estación dos. Entonces está funcionando. Ahora bien, si quisieras la media de solo la columna ST una, simplemente harías eso. Entonces eso te dará la media del ST uno de la Estación una columna. Y así sucesivamente. Entonces la idea aquí es que importar pandas, y cuando ejecutes esto, lo que está sucediendo ahí es que se esté creando un objeto llamado marco de datos Puedes ver que tienes una vista estructurada de estos datos. Entonces este es un tipo de objeto específico. Así como tenemos enteros y tenemos flotadores, también tenemos estos otros tipos que puedes encontrar en bibliotecas en estas bibliotecas de terceros, para que cada uno pueda crear sus propios Y se trata de bibliotecas, así construidas en bibliotecas, bibliotecas estándar, escritas en Python y bibliotecas de terceros, que casi siempre están escritas en Python. Eso es sobre bibliotecas. 77. Introducción al uso de Python con archivos CSV, JSON y Excel: Hola, bienvenidos a una nueva sección, y esto va a ser muy emocionante de enseñar para mí y además información muy, muy útil para que aprendas. Entonces estaremos trabajando con archivos CSV externos, archivos Excel, archivos JSON. Entonces estos son archivos externos donde puedes almacenar datos y puedes acceder a estos archivos. Puedes manipularlos desde tu programa Python. Para que tu programa pueda interactuar con estos archivos, y esto es lo que vas a aprender en esta sección. Así que prepárate y te hablaré en el siguiente video. 78. La biblioteca Pandas para + análisis de datos: Hola, bienvenidos a esta nueva sección. Y en esta sección, aprenderás a usar Pandas, que es una biblioteca Python muy importante, y realmente no querrás perderte eso Entonces, ¿qué es Pandas? Bueno, Pandas es una biblioteca proporciona estructuras de datos y herramientas de análisis de datos dentro de Python O si la palabra herramientas te confunde, entonces puedes decir que Pandas es una biblioteca proporciona estructuras de datos y código de análisis de datos Entonces, básicamente, Pandas permite cargar datos de diferentes fuentes en Python y luego usar código Python para analizar esos datos y producir resultados, los cuales pueden ser en forma de tablas, texto, y también visualización con la ayuda de bibliotecas de visualización como libro, libro, que se cubre más adelante en el curso Entonces, por ahora, nos centraremos en los datos sin visualizarlos, y Panas es genial para Entonces, prácticamente, ¿cómo usamos los Pandas? Bueno, aprendes a abrir archivos de texto usando Python construido en métodos de manejo de archivos anteriormente en el curso. Ahora bien, lo que abrimos desde TextFils era solo texto plano. Pero, ¿y si quieres cargar archivos de texto con datos construidos de filas y columnas O las cosas se complican un poco. Pero aquí es donde entra en juego los Pandas. Así que probablemente puedas hacerlo usando métodos Python integrados que has aprendido en el curso. Pero para ser más eficientes y para ser mucho más eficientes, necesita tener una biblioteca de alto nivel como Pandas, que sea capaz de reconocer dichas estructuras de datos automáticamente Utilizo pandas para cargar datos de actividades de minería de datos como el desguace web Por lo tanto, desecha datos de un sitio web con Python y luego almacena esos datos en esos marcos de datos. Entonces usas pandas para proporcionarte estructuras de datos en Python Y uso pandas para cargar datos de archivos de Excel, y también uso paneles para analizar esos datos en lugar de usar Excel Excel puede ser bueno para analizar una pequeña tabla de datos que cabe en la pantalla de su computadora. Pero para datos más grandes que eso, realmente quieres usar código. Escribes código Python una vez, y luego lo usas con otros datos también. Y no quieres hacer selecciones y arrastrar y muchas otras operaciones engorrosas que normalmente haces en un programa basado en gráficos como Excel Entonces el código es el camino a seguir si quieres ser eficiente con los datos, y Python es genial para eso con Pandas Realmente quieres hacerte un buen rato de los paneles, y lo aprenderás en esta sección y también lo practicarás con aplicaciones del mundo real que iremos construyendo a medida que avanzas en el curso. Sigamos adelante y vamos a sumergirnos en algún código ahora en las próximas conferencias. Nos vemos. 79. Primeros pasos con Pandas: Genial. Nuevamente, Pandas es una biblioteca que proporciona estructuras de datos y herramientas de análisis de datos en Python Entonces en esta conferencia, verás a lo que me refiero con estructuras de datos y análisis de datos. Entonces verás el objeto principal Pandas, que es una estructura que contiene los datos Y verás que obtenemos datos de la estructura y los analizamos. Así que voy a abrir una línea de comandos simple, y por ahora usaremos IPython simplemente genial para análisis de datos y trabajar con datos Pero aún mejor es el cuaderno de Júpiter. Jupiter Notebook es como un Python Shell. En realidad es una combinación de Python Shell y un editor de Python. Y es una herramienta basada en navegador donde puedes escribir código Python, y es muy eficiente, por lo que realmente aumenta tu productividad Pero para esta conferencia, quiero comenzar con cosas simples, así que un paso a la vez, y te voy a presentar a los pandas usando solo IPython Después en la siguiente conferencia, te mostraré cómo configurar un cuaderno de Júpiter anteriormente conocido como el cuaderno IPython Entonces configurarás a Júpiter, y yo te mostraré cómo trabajar con Júpiter Entonces, por ahora, sigamos adelante y usemos la consola simple de IPython Importar pandas. Y, normalmente, lo primero que haces es querer importar algunos datos, digamos, desde un archivo CSV o desde TextFile o incluso un archivo Excel o JSON u otros formatos, que estaremos cubriendo más adelante Pero también hay otras formas de crear una estructura de datos de pandas Ahora bien, lo primero que debes saber es esta estructura de datos de la que estoy hablando se llama marco de datos. Entonces ese es un objeto especial que contendrá los datos. Y puedes crear uno. Se puede almacenar un marco de datos en una variable, digamos DF uno. Marco de datos Mm pandas. Entonces estoy creando un marco de datos manualmente, pasando valores manualmente a través de Python. Normalmente, quieres usar otros archivos, como te mencioné. Así que el marco de datos ahora piensa en el marco de datos como una tabla. Por lo que es posible que desee pasar una lista de listas donde cada lista será una fila de esa tabla. Entonces pasemos algunos datos dos, cuatro, seis y diez, 20, 30. Ejecutas eso, eso fue exitoso porque no obtuviste un error. Tienes uno, y aquí está el marco de datos. Entonces 246 es la primera fila, diez, 20, 30 es la segunda fila. Estos cero, uno, dos son los nombres de las columnas, y estos son referidos como índices. Entonces 01 aquí están los índices para las filas, y estos aquí están los nombres de las columnas. La belleza de los paneles es que también puedes tener tus propios nombres de columna si quieres. Entonces voy a llamar de nuevo a esta expresión, y quiero pasar aquí un parámetro llamado columnas que espera una lista de nombres. Que tiene que tener el mismo número de elementos con el número de columnas que tiene su marco de datos. Entonces, si pasas lista con tres ítems, también quieres pasar tres columnas aquí. Digamos precio algo aleatorio, edad y valor. Ejecutas eso y déjame ampliar este DF uno, esta vez ves que ahí tienes tus propios nombres de columna. Ahora, de manera similar, también puedes pasar nombres personalizados para los índices pasando index como parámetro, y luego querrás pasar una lista con dos ítems porque tenemos dos filas solo digamos primero, segundo, DF uno, y tienes índices personalizados. Sin embargo, normalmente, no tendrás que pasar índices personalizados. Los datos normalmente tienen definido el número de columnas, pero las filas, puede que haya cientos y miles de filas o millones ahí. Así que realmente no quieres meterse con los nombres índice. Sin embargo, la característica es justamente eso en casos especiales. Entonces, hay una manera de crear un marco de datos de panel, y también tienes otras formas. Que no son muy comunes de usar, pero solo quería saber que están ahí. Entonces nuevamente, pasas una lista aquí, y luego lo que podrías hacer es pasar dos diccionarios dentro de esa lista. Para que puedas ver la similitud. Aquí utilizamos una lista de listas. Aquí también estamos pasando objeto de lista, pero es una lista de diccionarios. Y, lo que podrías hacer aquí es que podrías pasar valores, claves y valores para un diccionario, y aquí también. Entonces digamos nombre John nombre Jack, ejecuta ese DF dos. Y sí, este es otro marco de datos más. Si quisieras tener más columnas ahí, como apellido, querrías agregar aquí otra clave y valor para el diccionario. Entonces algo así como apellido y ahora, si ejecutas eso y DF dos, obtendrás la columna de apellido agregada ahí. Pero para Jack, no obtienes ninguno porque no pasaste apellido en el en el segundo diccionario. Entonces, si haces lo mismo por Jack, si pasas un apellido, obtendrás el valor aquí dentro. Entonces esas son dos formas básicas de construir marcos de datos sobre la marcha. Como dije, normalmente, estos valores saldrán de archivos de archivos CSV, archivos Excel, etcétera Eso lo haré a lo largo de las próximas conferencias. Y una cosa más que quiero que sepas es, esta es una estructura de datos, y ahora lo que significa el análisis de datos está fuera de esta estructura de datos, quieres sacar información. Entonces es posible que desee extraer, por ejemplo, el promedio de todos estos valores. Entonces dos, cuatro, seis, diez, 20, 30. Entonces aquí entramos en la fase de análisis de datos. Y el enfoque para hacer eso es, ya sabes, este objeto de marco de datos ahora, que puedes ver el tipo DF uno. Entonces es un marco de datos de Pandas. Ahora, este objeto de marco de datos tiene métodos asociados a él. Si haces DR y sí, ves que tiene bastantes métodos que puedes aplicarle. Localicemos ahí el método de la media. Aquí es mezquino. Entonces lo que podrías hacer es apuntar a DF uno y luego significa y corchetes, y obtienes la media de todas las columnas. Y si quieres la media de todo el marco de datos, podrías aplicar de nuevo el método de media después de eso. Entonces lo que esto hace es, aplica el método de la media sobre esta serie aquí. Entonces este tipo es un objeto serie panda. Las series tienen más o menos los mismos métodos que vas a aplicar a un marco de datos. Así DF uno y DF un punto Precio, y obtienes la serie de columna de precios. Entonces eso es también si revisas el tipo, eso también es serie de paneles. Por lo que el marco de datos está hecho de serie. Y por supuesto, también se puede aplicar el método medio al precio. De igual manera, también se pueden aplicar otros métodos que están disponibles allí. Entonces Max y tú obtienes el valor máximo. Y sí, eso es sobre la introducción a los Pandas. O en la próxima conferencia, aprenderás sobre Júpiter. Es muy agradable trabajar con Júpiter. Así que no te pierdas eso. Y luego seguiremos adelante y abriremos marcos de datos, crearemos marcos de datos a partir de archivos. Entonces te veré más tarde. 80. Configuración del cuaderno Jupyter +: Bueno, en esta conferencia, te voy a mostrar cómo configurar el cuaderno Júpiter o Júpiter para abreviar, y también cómo usarlo Hasta ahora, has trabajado tanto con Python como con un Shell interactivo e Python, pero también has trabajado con un editor como Atom. A veces es posible que tengas la necesidad de un híbrido entre un shell interactivo y un editor cuando quieras probar cosas, pero también quieres guardar tus bloques de código que estás escribiendo porque un shell interactivo es genial para probar cosas rápidamente, pero puedes guardar el código, y el editor es bueno para guardar el código, pero no es genial para probar cosas. Pero te puedo decir que existe una herramienta híbrida así, y eso se llama cuaderno Júpiter Y esa es una herramienta increíble que impulsará tu productividad. Júpiter es especialmente bueno cuando se trabaja con datos. Es un gran entorno para explorar datos, y verás su utilidad en solo un poco. Por supuesto, todavía quieres usar editores como Atom cuando estás trabajando con múltiples scripts de Python que interactúen entre sí. Ese es el caso de la aplicación web, por ejemplo, cuando estás desarrollando aplicaciones web, tendrás que lidiar con múltiples scripts Python y también archivos HTML, CSS, y otros archivos también. Construye una aplicación web más adelante en el curso y verás como atom es bueno para eso. Pero para los datos, usa Júpiter. Entonces Júpiter, veamos cómo instalarlo. Bueno, puedes ir a la instalación, así que instala y puedes pasar por estas instrucciones. Pero en lugar de pasar por esto, te aconsejo que realmente uses tu línea de comandos para instalar Júpiter y escribir en PIP instalar Para que descarguemos Júpiter y lo instalará en tu sistema Y después para iniciar una sesión de Júpiter, una buena práctica es ir a una carpeta Digamos, prueba tres. Y aquí puedes abrir un símbolo del sistema, y luego escribes Júpiter Sin libro Y eso abrirá sesión de Júpiter en el navegador. Entonces el cuaderno Júpiter es en realidad un cuaderno de navegador. El motivo por el que abrí el cuaderno de Júpiter en la línea de comandos fue que al menos en Windows, cuando haces Shift y luego haces clic derecho sobre carpeta, tu símbolo del sistema se abre en la carpeta actual, así que en esta de aquí Y luego cuando cree un archivo de notebook ahora, cada archivo se guardará en este directorio aquí. Alternativamente, puede abrir su símbolo del sistema donde quiera, y luego puede CD a la carpeta donde desea guardar sus cuadernos de Júpiter Bien, ahora no tenemos nada aquí. Entonces lo que puedes hacer es crear un cuaderno. E instalamos Jupiter Earth como una biblioteca Python. Entonces bajo cuadernos, tenemos Python tres disponibles. Entonces el kernel será Python tres. Si has asociado otros idiomas aquí, los verás aquí debajo de Cuadernos. Entonces este es un cuaderno vacío. Y este es el nombre de un cuaderno y se puede cambiar esto por digamos, probando. Presiona bien. Y si vas a la carpeta, verás que se creó ese archivo con nombre de prueba y extensión de notebook IPython Entonces eso se crea automáticamente cada vez que escribes algo aquí, haces algunos cambios o algo así. Ahora, déjame mostrarte cómo puedes trabajar con el cuaderno IPython Entonces puedes considerar cada celda. Esta es una celda, y puedes considerar cada celda como una línea en un shell Python normal. Pero aquí en este shell, en realidad puedes Escribir múltiples líneas de código. Digamos que imprime uno, y luego si no quieres ejecutar esto inmediato, puedes presionar Enter. Entonces con Enter, ingresa una nueva línea en la celda y luego imprime dos y así sucesivamente. Y si quieres ejecutar la celda ahora, puedes presionar Control Enter y obtienes la salida. Ahora bien, si quieres crear una nueva celda, Alt Enter haría eso. Y aquí puedes escribir otro bloque de código. Con Enter, vas a la siguiente línea, y así sucesivamente. Y si quieres ir a la siguiente celda enseguida. Entonces antes de presionar Control Enter, ahora puedes presionar Shift Enter y vas a la siguiente celda automáticamente. Y con Shift Enter, también ejecutas la celda en la que estabas trabajando. Puedes crear nuevas celdas con Alta Enter y puedes eliminarlas presionando primero, presionas Escape, y luego presionas DD dos veces DD nuevamente. Entonces es bastante flexible. Algo que debes notar es que tenemos dos modos, básicamente. Tenemos el modo de comando. Entonces, cuando estás en el modo de comando, ves un rectángulo gris alrededor de la celda. Y cuando vas a ir al modo de edición, entonces presionas Enter. Entonces, mientras estás enfocado en la celda actual, presionas Enter, y luego editas la celda. Entonces en modo edición, cuando escribes cosas, estás insertando texto en la celda, estás insertando código en la celda, modo Escape y comando, DD y borras la celda, ingresas, y ingresas una nueva celda. Entonces estos son los atajos más utilizados, los atajos de teclado. Pero si quieres conocer más atajos, puedes ir a ayuda y luego atajos de teclado. Y entonces ves una lista aquí. Pero estos son buenos para empezar. Cuando hayas terminado con esto, puedes simplemente cerrar una pestaña y también puedes cerrar el árbol de directorios aquí. Entonces fíjate que Júpiter en realidad abre en una sesión de anfitrión local Y si quieres volver a abrir tu libreta, puedes ir aquí de nuevo e ir a abrir Ventana de Comando aquí y cuaderno de Júpiter Y aquí está el archivo, y es tal y como lo dejamos. Ahora, un cuaderno de Júpiter se usa mejor para hacer exploraciones y especialmente exploraciones de datos Entonces, si estás trabajando, digamos, con análisis de datos o visualizaciones de datos, el cuaderno Júpiter es perfecto para usar Se puede utilizar el Cuaderno Júpiter, por ejemplo, para cargar una tabla de datos en la sesión Para eso, usarías pandas. Entonces importas la biblioteca, presionas Enter o Shift Enter para ir a la siguiente celda, y presionas Enter nuevamente para escribir algo. Entonces digamos DF iguala a Pandas, Dal Fred CSV. Y tengo archivo CSV en algún lugar de mi sistema. Centro de prensa y Whoa. Entonces obtienes una bonita tabla HML que se cargó desde el archivo CZ, y también puedes trazar gráficas en el cuaderno de Júpiter Entonces eso también es algo que estás aprendiendo en el curso. Y así análisis de datos y visualizaciones, también puedes usar el cuaderno Jupiter para desguace web Eso es muy conveniente porque tienes estos bloques de código y luego tendrás que ajustar continuamente el código para que quieras cambiar algo aquí, y luego obtienes una buena pantalla No esta exactamente porque esta es una cadena deshecha, pero esta, por ejemplo, tienes un control deslizante aquí, tienes un control deslizante aquí, así puedes desplazarte hacia arriba y hacia abajo dentro de una ventana separada que no afecta a tu general tu ventana principal Entonces espero que te hayas hecho una buena idea del libro de reglas de Júpiter Solo toma nota de atajos de atajos de teclado para ejecutar código, el modo de edición y comando, ya sabes, Enter escape y Enter de nuevo y así sucesivamente y así sucesivamente. Y solo los practicas un poco, y te acostumbrarás a Júpiter muy rápidamente. Nos vemos en la próxima conferencia. 81. Cargar archivos Csv en Python: Ahora que tienes una comprensión básica de los pandas y sabes cómo usar los cuadernos de Júpiter, podemos seguir adelante y aprender a cargar varios tipos de archivos en Python, usando pandas Entonces tengo cinco expedientes aquí. Contienen exactamente los mismos sitios de datos. Y esta es una versión de texto, o déjame abrir la versión de Excel que mostrará una bonita visión general de los datos, como puedes ver. Así que tenemos siete líneas de código, incluyendo el encabezado, y también tenemos siete columnas. Entonces son solo algunos datos básicos de supermercados, la dirección ciudad estado país y el nombre del supermercado y número de empleados. Y de manera similar, tenemos exactamente los mismos datos, pero en diferentes formatos. Entonces tenemos CSV y CSV significa valores separados por comas. Entonces es básicamente un archivo de texto donde los valores, las columnas están separadas por comas, como puedes ver aquí Entonces cada columna está separada por coma. Pero tiene una extensión CSV, y se puede abrir con Excel. Entonces, si abro esto ahora, verás el mismo conjunto de datos que viste en el archivo ELS. También tenemos los mismos datos en separados por semi columnas, como puedes ver aquí. Y sí, si estás trabajando con datos, probablemente estés familiarizado con este tipo de archivos. Entonces así es como almacenar datos. Necesitas tener algunas convenciones, y usando dicha convención, entonces usas otros programas como Python para cargar estos datos. Entonces cuando cargues el archivo CS, Python sabe que los valores estarán separados por comas y sabe cómo separarlos. Sabe extraer valores. Entonces abriremos todos estos uno por uno. También tenemos un archivo JSON. Que es otro formato más para almacenar datos, y parece que el diccionario Python, en realidad. Entonces aprenderemos a convertirlos al marco de datos de Panda, también Entonces todos estos serán convertidos a los dataframes de Panda. Sí, voy a seguir adelante e iniciar Júpiter Júpiter. Aquí están mis archivos. Voy a seguir adelante y crear un nuevo cuaderno de Júpiter para Python tres Antes de seguir adelante y cargar esos archivos en Python. Hay un truco que normalmente hago. Importa OS y luego s lista de puntos ahí, y voy a Enter, ejecutarlo. Vas a la siguiente línea. Y lo que obtienes es que obtienes una lista de archivos y carpetas así como de los nombres de archivos que tienes en el directorio actual. Entonces ahora no tengo que cambiar a mi carpeta para mirar los nombres. Tengo todo aquí. Ahora puedo seguir adelante e importar Pandas. Y comencemos a cargar estos archivos uno por uno. Digamos DF uno, entonces el marco de datos uno, y eso sería igual a Pandas Voy a leer CSV. Y después hay que pasar el nombre del archivo que desea abrir. Supermercado el CSV y solo ingresa y tal vez quieras imprimirlo. Entonces DF ahí. Y sí, lo que tenemos aquí es así que cargamos primero el marco de datos , y luego lo imprimimos. Así que tenemos esta linda mesa ahí dentro. Así de fácil es cargar datos del archivo CS. Ahora, el beneficio de tener los datos en Python es que una vez que los cargues en Python, puedes hacer muchas, muchas operaciones con tus datos. Puedes hacer estadísticas y agregar nuevas columnas. Puede fusionar columnas. agregar los números de una columna a los números de las otras columnas. Y al final, puedes volver a exportar esos datos a formatos como CSV, Excel, etcétera Entonces vamos a hacer eso más tarde. Pero primero, veamos cómo cargamos datos de varios formatos de archivo en el siguiente video. 82. Cargar archivos de Excel en Python: Y sigamos adelante y carguemos el archivo Excel X, en realidad, un archivo Excel. Entonces Pandas lee Excel y te pasa el nombre del archivo Excel Y normalmente también deberías pasar otro parámetro aquí para los archivos de Excel porque, ya sabes, los archivos de Excel podrían tener múltiples hojas dentro de ellos. Entonces quieres especificar el nombre de la hoja que comienza desde cero, por lo que necesitas pasar el índice en realidad. Si quieres la primera hoja, quieres pasar cero. Si quieres una segunda hoja, quieres pasar una y así una. Entonces voy a pasar cero ahí. Tenía sólo una hoja en el archivo Excel. D tres ejecutar. Y, también pudimos leer con éxito el archivo Excel. Entonces, sigamos adelante. 83. Cargar archivos de texto en Python: Sí, sigamos adelante con el archivo TXT. Entonces es un supermercado separado por comas. Entonces es una estructura de datos separada por comas. Para eso, así para archivo TXT separado por comas, nuevamente, se usa R CSV Así como así, D cuatro. Y aquí está el marco de datos. Entonces los supermercados CSV en realidad algunos dicen que es un archivo separado por comas, pero para ser más precisos, dirías valores separados por caracteres Entonces C es para el personaje. Y, podría haber diferentes personajes ahí. En este caso, cuando tienes comas como separadores, no tienes que pasar ningún parámetro separador aquí Pero cuando tengas otros valores como separadores, tendrás que pasar eso Ese es el siguiente escenario. Entonces DA cinco, pandas punto rojo, CSV. Entonces estamos hablando de supermercados, punto y coma, o supermercados, punto y coma TXT Sí, déjame probar este SIs ahora. Entonces, si ejecuto eso, Python no podrá reconocer el punto y coma ahí La razón de ello es porque el parámetro separador tiene un valor de coma por defecto Entonces quieres cambiar eso a tu separador, que es un punto y coma, en este caso, ejecutar Ahí tenemos un error, separador de argumentos de palabra clave inesperado . Entonces parece leer subrayado, CSV no tiene un parámetro separado separado En ese caso, quieres hacer para pedir ayuda. Entonces sí, aquí están los parámetros que quieres pasar. Entonces en realidad es un SAP, y se puede ver que el valor predeterminado de SAP es una coma Así que cierra eso y ve aquí, cámbialo a SAP, ejecuta, y aquí está el marco de datos. Genial. ¿Qué queda por hacer? Sí, consumimos todo. Y eso se trata de leer archivos locales. 84. Introducción a Numpy ++: Considera esta imagen en escala de grises. Ahora esta imagen está hecha de píxeles. Este particular tiene tres por cinco, lo que tiene 15 píxeles. Entonces es una imagen bastante pequeña. Ahora, cada píxel tiene un valor, y eso es lo que define la intensidad del color gris para cada píxel. En realidad, estos son números, pero nuestra pantalla de computadora los muestra en un formato de color, que es un legible por nosotros los humanos. Lo que intento conseguir es que los programas usen números para almacenar imágenes. Entonces la pantalla de la computadora o la pantalla convierte estos números a colores. Python también puede hacer procesamiento de imágenes, igual que Photoshop. Probablemente no pueda hacer todas las cosas geniales que puedes hacer con Photoshop, pero puedes hacer uso de Python para automatizar las cosas. Por ejemplo, usaremos las capacidades de procesamiento de imágenes de Python para detectar rostros a partir de fotos de imágenes y también detectar objetos en movimiento en videos también. Así que los videos están hechos de imágenes. Entonces es lo mismo, básicamente. Y Python almacena y lee imágenes usando matrices de números. Por ejemplo, esta imagen podría representarse como ustedes saben, una lista de otras tres listas. Entonces tres listan porque ahí tenemos tres filas con píxeles. Entonces en cada una de las listas, tendrías como cinco números y así sucesivamente y así sucesivamente, y el quinto. Y lo mismo para las otras dos listas. Tenemos cinco números porque tenemos cinco columnas, así que cinco píxeles por cada fila. Y esa es una imagen para Python. Y aquí es donde Numpi viene muy bien. Entonces, si bien se pueden representar imágenes con es como lo hicimos aquí, esto no es muy eficiente porque para las imágenes grandes, es ocupar mucha memoria, y por lo tanto ralentizan las operaciones sobre ellas. Entonces esto lo resuelve Numpi que es una biblioteca, una biblioteca Python que proporciona un objeto de matriz multidimensional Así que permítanme seguir adelante y crear este objeto array. En primer lugar, lo que debes hacer es importar Numbi Y si has instalado pandas, numpie debería haber sido instalado con pandas porque pandas Si todavía tienes un Numpi instalado, solo tienes que seguir adelante y pip Y si por alguna razón tienes algunos problemas en Windows, entonces solo tienes que seguir adelante, como te he enseñado y encuentra las bibliotecas Python pre compiladas. Ve a este lado y luego busca Numpi luego averigua si estás en una versión 3.5 de Python deja que solo obtengas esa versión Y luego apuntas a este archivo con Pip Install y el nombre del archivo Genial. No, tengo num pi instalado, así que voy a crear este objeto multidimensional y almacenarlo en variable. Eso sería punto numpy rango A. Y digamos 27. Ejecute eso e imprima para que este sea un array NumPI. Así es como se llama. Esta en particular no es exactamente una matriz multidimensional porque solo tiene una dimensión. Entonces es un avión es como una lista de planos, una lista de Python, pero aún así no es exactamente del tipo. Lo siento. Entonces es una matriz NPi N dimensional Puede tener una dimensión, dos o tres. Entonces tenemos uno, dos, tres, y voy a mostrar todos estos escenarios. Entonces esa era la matriz unidimensional, y si quieres imprimirla en una buena forma, esa sería la matriz. Ahora, solo estoy creando una matriz numpy usando números sobre la marcha aquí, pero normalmente tendrías que crear un rayo a partir de imágenes, y lo haremos en solo un poco Entonces, por ahora, vamos a crear algunas matrices manualmente. Ahora, veamos qué matrices bidimensionales. Forma de V tres por nueve. Entonces ya tenemos esta matriz unidimensional, y queremos convertirla en una matriz bidimensional. Si ejecutas eso, obtienes una matriz bidimensional. Entonces esa es una matriz bidimensional porque tiene dos dimensiones. Entonces piénsalo como esta imagen cae. Tenemos dos dimensiones vertical y horizontal. Ahora bien, ¿qué es una matriz tridimensional? A pesar de que las matrices tridimensionales se usan con menos frecuencia, todavía es bueno conocerlas. De todos modos, permítanme crear una matriz tridimensional. Yo podría decir tres por tres porque sabes que tienes 27 elementos, así que tres por tres por tres te da 27. Sí, eso es una matriz tridimensional. Piensa en eso como un cubo que tiene tres dimensiones. Entonces tres por tres por tres. Y prácticamente, eso lo verás en sólo un poco en esta conferencia. ¿Dónde nos ocupamos de matriz tridimensional? Así que tengan miedo conmigo. Y puedes ver las similitudes entre la matriz no Pi y la lista simple de listas de Python. Entonces esto aquí sería como una matriz bidimensional, si te gusta llamarlo así. La estructura en el nivel bajo es diferente entre la lista Python y las matrices NPI Y también las matrices Nopi le permiten realizar algunas operaciones más eficientes como la iteración entre elementos de matriz y así sucesivamente Y también puedes crear una matriz Nopi a partir de la lista de Python. Por ejemplo, obtendré esta lista aquí y crearé un nuevo objeto, y luego apuntaré a nupi y para convertir una lista a np array, querrás usar un método array Y luego entre los corchetes va el objeto que se quiere convertir. M y eso es una matriz, que es casi exactamente como esta de aquí. Y si imprimes eso, no podrás ver la diferencia. Ya sabes, se ven exactamente iguales. Pero no lo son porque esto es una lista, y esto es un numpy Bien. Genial. Sigamos adelante. Entonces ese es Napi y como mencioné anteriormente, Napi es una biblioteca base para otras bibliotecas como Pandas y también OpenCV, que es Entonces, los marcos de datos de Pandas se basan en matrices Numpi, y los objetos CV abiertos se basan en Entonces, Pandas, lo que hace es que solo agrega algunas características geniales Ahí dentro, como agrega. Da capacidades para tener encabezados e índices de tabla, que no puedes tener en Numpi porque Numpi está destinado a ser más simple y en un nivel más bajo de almacenar objetos Y así Numpi es un requisito para muchas bibliotecas. Anda vamos a resolver esta conferencia aquí, y en la próxima conferencia, vamos a seguir adelante y crear una matriz NumPI a partir de nuestra imagen Entonces esta imagen. Bien, nos vemos ahí. 85. Cómo convertir imágenes en matrices numéricas: Y si, CV dos esta instalado. Y lo que puedo hacer con Civ dos, entre muchas otras cosas, lo que puedo hacer lo primero es cargar una imagen en Python usando CV dos métodos Entonces estaré cargando esa imagen, que es una imagen muy pequeña, por cierto, sólo tengo 15 pixeles. Ya sabes, una imagen normal que usabas para tomar fotos o en tu teléfono o lo que sea. Tiene como mil por mil píxeles, que es de 1 millón de píxeles, más o menos. Pero debemos mantener las cosas simples para que entiendas lo que está pasando. CV para importar eso y si, eso fue exitoso. Sabes, voy a crear una variable y llamaré a esta imagen FMI y G para gris. Puedes llamarlo como quieras, y CV para liderar una imagen para cargarlo en Python, quieres usar el método de imagen compartida. Y luego le pasas el nombre de tu imagen. Puedes encontrar esta imagen en la sección de recursos. Así que solo sigue adelante y descárgalo. Y ahora esto está aquí en el mismo director con mi cuaderno de Júpiter, así puedo seguir adelante y señalar el nombre del archivo incluyendo la extensión, punto PNG de pequeño grado Y aquí el método de lectura de imágenes también esperan otro argumento de usted. Eso puede ser cero o uno. Entonces cero significa que quieres leer la imagen en escala de grises. Y si pasas uno, lees la imagen en BGR, que significa azul, verde y rojo Y entenderás lo que significan cada una de las versiones. Entonces hagamos esto primero. Sí, voy a imprimir eso. Y cómo, eso fue todo. Entonces lo que obtuvimos es np array. Es una matriz bidimensional, lo que tiene dimensiones de tres por cinco, que es lo mismo que nuestra imagen. Las filas y cinco columnas. Ahora bien, la razón por la que pasamos cero ahí, así que estamos leyendo eso como imagen en escala de grises es porque, ya sabes, este archivo PNG en realidad, tiene tres bandas o se puede decir tres capas Y cada capa tiene una cierta cantidad de colores. Entonces la primera capa tiene una cierta cantidad de azul, y la segunda capa tiene una cierta cantidad de verde, y la última capa tiene cierta cantidad de rojo. Por lo que combinar cada píxel es una combinación de la intensidad de azul, verde y rojo. Sé que en otros programas usan RGB en contrario usamos este BGR ahora, prácticamente, este archivo aquí, esta imagen prácticamente es una imagen en escala de grises No obstante, cada uno de estos píxeles tiene sus propias bandas, por lo que la combinación de ellos siempre crea, en este caso, los colores gris y blanco y negro. Pero si tuviéramos una imagen en color ahí, esto la convertiría a una escala de grises esta función Entonces nuevamente, lo que tenemos aquí es ya sabes, 187 es intensidad de valor para este primer píxel. Y entonces tienes el otro número, y para el blanco, ves el blanco aquí. Tenemos tres pixeles blancos. Y esos son 255, todos ellos. Los colores Ay van desde cero, cero sería negro, tono negro y 255 para blanco. Y todo entre ellos está en la escala de grises. Entonces ahora si cambio este 21, obtendré la matriz tridimensional, donde esto representa la capa azul, la verde y la roja. O incluso puedes imprimirlo. Sin embargo, ten cuidado de que esto esté un poco transpuesto. Entonces las matrices son tres columnas aquí y las filas son verticales. Básicamente, lo que esto dice es que este píxel tiene estos valores correspondientes. Por lo que tiene una intensidad de 187 para el azul, 198 para el verde y dos oh nueve para el rojo. Y sí, así es como creas matrices numpi a partir de imágenes. Pero, ¿ y al revés? Así que creando imágenes de matriz numpi. Bueno, para hacer eso, vuelves a hacer cv dos, cv dos, y luego señalarías el método Iriz, así imagen Y luego quieres pasarle un nombre a tu imagen. Digamos, nuevo pequeño punto gris PNG, y luego por supuesto, necesitas pasar tu no pi. Entonces pasemos imagen gris. Ejecuta eso, obtienes dos, lo que significa que tu caída debería haber sido creada ahora. Sí, nuevo gris pequeño. Y sí, eso es un florete y espero que fortalezcan tus conocimientos sobre Nopi. Ahora vamos a seguir adelante y hacer algunas cosas más aquí. Y específicamente en la próxima conferencia, aprenderemos a hacer indexación y rebanado e iteración de e iteración Entonces, básicamente, aprenderás a acceder a estos valores. Nos vemos ahí en la próxima conferencia. 86. Indexación, rebanado e iteración de matrices numpicadas: Todo bien. Ya sabes cómo hacer una lista de rebanadas. Entonces cero a uno, te daremos el primer ítem de la lista y cero a dos, el primero y el segundo ítem de la lista, y así sucesivamente. Con matrices no Pi, básicamente haces lo mismo, excepto con matrices que no son Pi, a veces tienes dos o más dimensiones o tres Entonces déjame seguir adelante y voy a crear Voy a empezar con una matriz bidimensional. Entonces voy a obtener eso de la variable. Entonces esta es la matriz nonpi con la que trabajaremos. Y si, si quieres extraer este número aquí, aquí, este, y este. Entonces estos cuatro números. Bueno, primero tendrías que establecer el índice de las filas que quieres cortar. Entonces eso sería de cero a dos, lo que te da las dos primeras filas. En realidad, podemos probar eso. Y verás que obtienes las dos primeras filas. Ahora bien, si quieres sólo esta porción aquí, entonces estos dos números y estos dos, querrías pasar. Coma ahí, y luego el índice para las columnas. Lo cual sería, ya sabes, cero aquí, uno, así que dos, tres, sí, dos a cuatro, tal vez. Sí. Pero tú lo haces. Ah, eso es. Eso significa que tienes este sistema de indexación Entonces comienza desde cero para las filas, y luego la segunda fila es una y dos y así sucesivamente. Cuatro columnas, lo mismo. Cero, uno, dos, tres y cuatro. Y en realidad, si quieres, puedes ver la forma de tu n por array. Entonces es de tres por cinco, lo que significa cero a dos y cero a cuatro. Genial. Y claro, puedes usar la convención de indexación de listas, para que puedas pasar cero y todo después de eso o simplemente así Entonces obtienes todas las filas y solo columnas 2-3. De igual manera, puedes obtener solo un valor si quieres. No particularmente este porque tres está fuera de los huesos para el eje cero. Entonces el eje cero es un eje horizontal, que dice que no hay fila con índice tres. Entonces pusimos cero, uno, dos. Entonces pasemos dos ahí. Y obtienes 182, que es el último elemento de la matriz Nopi Sí, eso es sobre la indexación. ¿Qué tal iterar a través de una matriz Nopi? Bueno, hay dos formas de hacerlo. La primera forma es decir, digamos para I en tu matriz Nopi , imprima I. Lo que eso hará es que imprimirá las filas de tus arrays entumecidos Entonces a lo que esto accedo en tu matriz numérica son las filas. Entonces en cada iteración, obtiene la primera fila y la imprime en la primera iteración, luego la segunda, y luego la tercera Y si quieres iterar a través de columnas, querrás acceder a la versión transpuesta de tu matriz numpi Y así es como lo haces. Por último, si quieres iterar valor por valor, dirías para I en imagen y punto de impresión plana I. Entonces esta propiedad, lo que hace es que te permite acceder a los valores de tu matriz numpi uno por uno Y eso es sobre indexar, rebanar e iterar. Te veré en la próxima conferencia. 87. Apilar y dividir matrices numéricas.: Ahora mismo que sabe cómo hacer rebanar e iterar a través de matrices numpy, hagamos algunas Y eso sería almacenar matrices nPi, por lo que concatenar matrices numpy entre sí y también dividir una matriz numpi Sí, tengo esta matriz numpy todavía aquí. Entonces comencemos con apilar dos matrices numpy. Para hacer eso, es posible que desee crear una nueva variable donde guardará su gran matriz, y eso sería igual a nupi y el método para almacenar dos rayos no Pi, en realidad, hay dos métodos Uno es pila horizontal, así que pila H. Eso espera pasar dos o más matrices numpy que desea apilar horizontalmente Así que déjame pasar OMG, y luego la misma matriz, no es un problema Si tuvieras dos matrices diferentes, podrías hacer eso, pero solo estoy pasando la misma matriz allí. Ahora bien, si ejecutas esto, obtendrás un error, y quiero que veas este error para que lo entiendas. Entonces dice que H stack toma un argumento posicional, pero se dieron dos, lo que significa que H pila dentro de los corchetes, obtiene solo un argumento, pero estamos pasando dos Entonces, ¿cómo vamos a concatenar dos matrices que no sean Pi? Podemos simplemente pasar allí una matriz no pi. Entonces la solución aquí es tener una tupla. De matrices Nopi, así como así. Entonces un derribo dentro de la entrada del método de pila A. Eso lo ejecutas. Y aquí hay una matriz apilada. Entonces esta es la primera matriz, y la siguiente matriz, que en este caso, pasa a ser la misma, pero si quieres, puedes agregar más y obtienes una matriz más larga, que no es muy buena así. Para que puedas imprimirlo. Y si, ahora ves la diferencia. Entonces la primera matriz, la segunda y la tercera. Y si quieres apilar verticalmente, querrías hacer V ahí. Oh, sí. Como esperabas, esto concatena las matrices en la posición vertical en el eje vertical Tenga en cuenta que si intenta concatenar matrices que tienen diferentes dimensiones, obtendrá un error Entonces IMC tiene tres dimensiones, si puedes recordar eso desde aquí arriba Ahora, aprenderás a concatenar y dividir una matriz en matrices más pequeñas Bueno, para hacer eso, podrías crear una variable y luego una división horizontal numpy para dividir horizontalmente Y esto espera una matriz numpy y cuántas matrices desea producir a partir de eso. Entonces horizontalmente, digamos tres. Derecha. Y sí, esto dice que la división de matriz no da como resultado una división igual. La razón de eso es, ya sabes, intentamos que esta matriz tiene una, dos, tres, cuatro, cinco columnas. Entonces estás tratando de dividir cinco por tres. Un umpi no puede decidir cómo hacer eso. Entonces, ¿debería darte una matriz pi con estas dos columnas primero, y luego otro árbitro con dos columnas, y luego una última matriz nPi con una Entonces numpi no puede hacer eso. Lo que deberías hacer es tal vez cinco ahí, y L T m debería darte cinco matrices numpy diferentes, que en este caso pasa a ser una matriz por cada columna Y puedes hacer división vertical. Esta vez podemos probar tres porque ahí tenemos nueve filas. Y sin embargo, obtenemos tres arreglos pequeños. Tenga en cuenta que este LSD, por lo que la división, lo que produce es una lista de Python de matrices numpy Entonces es una lista simple de Python. Y fuera de eso, puedes acceder a cada uno de los rayos nub si quieres ya lo sabes. Entonces da salida a la primera matriz. Y si, eso se trata de concatenar y dividir los rayos numpi Espero darte una buena visión general de numpi. Trato de hacer algunos ejemplos prácticos como abrir imágenes. Pero esto todavía está en la parte teórica. Entonces Napi es bastante teórico, y solo lo entiendes cuando llegas a usarlo, así Ejemplos reales como trabajar con pandas como hicimos anteriormente en el curso y también trabajar con imágenes Así que vamos a hacer un procesamiento de imágenes de núcleo duro en las próximas conferencias de la siguiente sección. Y verás como el num pi viene bien ahí dentro. Y si, espero que disfrutes esto, y te veré después. 88. Aplicación 1: mapa web con Python y HTML +: Hola otra vez y bienvenidos a esta nueva sección del curso en esta sección, vas a construir la segunda aplicación por supuesto. Específicamente, lo que vas a construir con Python es este mapa web que ves aquí Un mapa web es un mapa que se muestra a través un navegador y se puede visitar a través de la web Este mapa fue construido con Python y volumen. Folume es una biblioteca Python, y el mapa tiene tres capas Tiene una capa de mapa base. El que ves aquí con estos nombres en la parte posterior y tiene una capa poligonal, que representa la población de los países También tenemos esta capa de punto aquí con estos puntos y puedes activar y desactivar estas capas. También tenemos estas ventanas emergentes. Esto es lo que vas a construir. A, sigamos adelante y hagamos esto. Nos vemos en la próxima conferencia. 89. HTML y Python: crea un mapa HTML con Python +: Hola, de nuevo, espero que sigas el video anterior donde te presenté el mapa que vas a construir en esta sección. Eso era un mapa web, y como te darás cuenta para construir ese mapa web, la instalación predeterminada de Python no es suficiente porque lógicamente, un Python no puede tener todas las funcionalidades posibles por defecto porque si tuviera todas las funcionalidades, entonces Python se volvería muy pesado Por lo tanto, es una opción inteligente tener bibliotecas externas que puede elegir instalar o no. Y este es el caso del mapeo web. Para construir el mapa web que te mostré en la conferencia anterior, necesitas una biblioteca, una biblioteca de terceros, que se llama volumen. Como te darás cuenta necesitas instalar esa biblioteca. Ahora, solo tenga en cuenta, tenía algunos videos anteriores sobre esta sección, algunos videos antiguos, pero tuve que cambiarlos. Estoy grabando nuevos videos ahora. Este es un video nuevo, un video actualizado, y todos los siguientes videos de esta sección porque el volumen había realizado algunos cambios en el código en comparación con las versiones anteriores. Por lo tanto, tuve que rehacer los videos. Ahora bien, esta vez estoy usando una computadora Mac, pero eso no va a hacer ninguna diferencia. Si estás en Windows, Linux o Mac, todo funcionará exactamente igual. La única diferencia es la forma en que abres átomo, claro. En Windows, crea una carpeta vacía donde guardarás los archivos para este proyecto. Mi carpeta aquí en Mac está mapeando en Windows, puedes mantener el turno y hacer clic derecho. Y luego ir a abrir átomo aquí para abrir átomo en esta carpeta. En una Mac, puedes presionar Command Space, atom luego ir a View Developer open in Dev mode y luego localizar la carpeta y hacer clic en Abrir. Sí, eso es. Voy a cerrar todo esto déjame abrir la terminal y ahora seguir adelante e instalar volumen. Para ello, es necesario escribir volumen de instalación. Normalmente, tendrías que hacer esto en Windows. En Mac, si tienes dos instalaciones de Python, es posible que necesites hacer PIP tres Eso dirá explícitamente instalar volumen para Python tres. El volumen se instaló correctamente. Si tienes un mensaje diciendo que se requiere Gina dos para este paquete, entonces solo tienes que seguir adelante y hacer PIP tres instala Gina dos No obstante, espero que ese volumen instale Jinja dos por defecto como lo hizo para mí, así que debería ser bueno para ir Una vez que hayas hecho eso, voy a abrir Python, en realidad, Python tres. En el mapa, es necesario especificar Python tres explícitamente. Lo que voy a hacer ahora es que voy a crear un mapa web básico voy a usar Python shell interactivo para eso para que te muestre las cosas alrededor Intente importar volumen. No tener errores, eso significa que el volumen se ha instalado correctamente. Ahora bien, ¿cómo funciona el volumen? Bueno, todo gira alrededor de un objeto llamado mapa. Lo primero que debes hacer una vez que importas el volumen es crear un objeto de mapa. Estoy usando una variable para almacenar ese objeto de mapa y luego igual al punto de volumen MAP. Esta es la clase que crea este objeto. Si lo desea, en realidad puede verificar el volumen para obtener una lista de objetos disponibles que puede usar en el volumen. Aquí está el mapa. Ignora a los demás por ahora, los revisaremos más tarde. También puedes pedir ayuda ahora, volumen mapa de puntos para ver qué puedes pasar a este objeto de mapa. Crea un mapa con volumen y folleto punto Gs. Lo que hace el volumen es que realmente produce, usas Python, escribes código Python y ese código Python se convertirá automáticamente a código JavaScript y HTML y código CSS. Porque necesitas Javascript, CSS y HML para crear webmps No se puede hacer eso directamente con el código Python. El navegador lee HML CSS y JavaScript y renderiza el código de estos tres lenguajes de programación dos elementos como texto y líneas y puntos e imágenes Eso es lo que hace el volumen. Eso es algo maravilloso que puedas hacer eso con Python a través de Python. De todas formas, puedes mirar aquí abajo en parámetros. Puede pasar un parámetro de ubicación aquí. Y se puede especificar el ancho. De todos modos, si no especificas el ancho, se utilizará un ancho predeterminado del 100% del área del navegador, no tienes que pasar el ancho y el alto también, y luego tienes mosaicos, predeterminado es Open Street Map tiles. Tiles es un fondo del mapa. Eso lo vas a ver en un minuto. También tienes otros parámetros, que puedes mirar por ti mismo, creo. Presioné Q para salir de la ayuda y sigamos adelante y creamos el objeto de mapa. Por último, mapa de puntos de volumen. Entonces ubicación, necesitas pasar un parámetro de ubicación ahí para que el mapa sepa dónde abrir. Puede abrirse, digamos cerca de Alaska o cerca de Groenlandia o Sudáfrica Estamos hablando de la vista inicial, pero luego puedes acercar y alejar. Déjame pasar una ubicación aleatoria. Las ubicaciones, por cierto, se dan a través de coordenadas por defecto, necesario pasar las coordenadas geográficas, que es latitud y longitud. La latitud varía de -90 a cero a 90. Entonces déjame pasar 80 ahí. Por cierto, esto va dentro de la lista en realidad. 80 una coma y luego la longitud, la longitud va de cero a -180 y de cero a 180 Déjame pasar -100. Y cierra el soporte. Se pasa una lista de coordenadas a la ubicación. En realidad, eso es suficiente, puedes tener un objeto de mapa con esa ejecución, no obtienes un error, eso significa que todo está funcionando bien. Ahora tienes un objeto de mapa, pero eso es solo un objeto dentro de Python. Aún no has traducido ese objeto a HTML y CSS y código JavaScript. Lo que debes hacer a continuación es apuntar a ese objeto de mapa. Y luego usa el método save y luego pasa un nombre para el archivo de mapa que se creará. Por supuesto, los mapas se crearán en formato HTML. HTML es lo que contiene todos estos elementos que renderizan todo el navegador. Texto e imágenes y así sucesivamente. Cierre el corchete, ejecute. Como ves, se agregó un archivo aquí, mapa un punto HTML. Pero déjame ir a la carpeta, haz doble clic en eso, eso se abrirá en tu navegador predeterminado. Entonces esta es solo una ubicación aleatoria. No sé qué es. Isla Magan Eso parece estar en Canadá, muy al norte de Canadá. Esto es. Este es el mapa web. Si haces zoom, verás más detalles en el mapa así. Cuanto más acerques, más elementos verás. Eso es lo que quería mostrarte. Si quieres otra ubicación, querrás cambiar las coordenadas aquí en ubicación. Pero si no sabes qué coordenadas tiene tu lugar favorito, entonces puede haber diferentes formas de descubrirlo, pero una forma rápida es ir a maps.google.com Digamos que quieres saber eso déjame acercarme aquí. Quieres centrar el mapa alrededor de esta ubicación, clic derecho ahí y ir a Qué hay aquí, copiar estas coordenadas, copiar esas coordenadas, o si no puedes copiarlas solo ¿recuerdas? 38.58 aproximadamente menos 99 veces 09 Entonces necesitas volver a guardar el mapa, mapear un punto ML y eso anulará el mapa anterior. Ve aquí, recarga, ya ves ahora tenemos un centro diferente del mapa Por supuesto, también puedes jugar con el Zoom, así puedes agregar un parámetro Zoom aquí. Esto se llama inicio de Zoom. Pongámoslo a las seis. No olvides cerrar el soporte aquí. Ejecute la tecla de flecha superior para llamar a una sentencia ejecutada previamente como map save. También puedes optar por ir al navegador y recargar con Control R o Comando R, y eso te mostrará el nuevo mapa con otro factor de Zoom De todos modos, eso es todo. jugar un poco con esto. En la próxima conferencia, te mostraré cómo sumar puntos a este mapa. Voy a ver el 90. HTML&Python Añadir un marcador al mapa: Hola, de nuevo, y bienvenidos a esta nueva conferencia. En esta conferencia, vas a aprender a sumar puntos al mapa que construimos anteriormente, que es este de aquí. Todo lo que tenemos aquí es un mapa base, el mapa de fondo, que es una capa en realidad es una capa viene del servicio OpenStreet Map Así que los mapas de Open Street, te dan una capa. En realidad volumen te servirá esta capa en segundo plano a través de JavaScript. Pero también puedes agregar otras capas, otras capas base y también puntos que puedes agregar encima de la capa base. Déjame volver al código. Esto es lo que escribimos en la conferencia anterior. En realidad, lo escribimos aquí en el shell interactivo. Pero solo lo copio y pego esto en archivo para que lo tengamos y que podamos agregar más código ahora encima de esto. Nuevamente, como te dije, puedes hacer ayuda volumen mapa de puntos y ya ves puedes agregar otras cosas aquí, como aquí tienes unos parámetros. Se pueden agregar mosaicos. El valor por defecto son los mapas de calles abiertos, pero si especificas otro mosaico, como map box bright y que tiene que estar entre comillas, como puedes ver aquí, En el parámetro tiles, esto espera un objeto string. Ubicación, por ejemplo, espera un vuelco o una lista, y eso es lo que pasamos pasó una lista de coordenadas El ancho sería un entero, un entero, la altura. Como uno, también tienes otras opciones, que puedes probar por ti mismo. Yo sólo quiero probar este por ahora. Déjame abrir un nuevo shell Python. Python tres mapa uno, asegúrese de haber guardado su ejecución de script. Entonces puedes volver a la carpeta y abrir mapa. Déjame ir a Farfox Control R o Command R para recargar y verás que el fondo ha cambiado, así que ahora tenemos un nuevo mapa base Volvamos ahora al guión. Lo que voy a hacer es agregar algunos marcadores de punto encima del mapa base. ¿Cómo lo haces? Bueno, si haces el volumen, aquí puedes ver que tienes algunos objetos y el que queremos es un marcador o un marcador circular. probaré a los dos. Pero quiero explicarte la lógica de cómo agregas objetos al objeto de mapa. En portafolio, creamos un objeto de mapa, y luego entre el objeto de mapa y el método seguro del objeto de mapa, puede agregar elementos objetos a ese mapa. Lo que quiero añadir en este caso es un marcador. Entonces puedo hacer mapa agregar niño. Utilizamos el método Adil para agregar niños. Estos objetos de los que estoy hablando son referidos como niños cuando los agregas al mapa. Map adchild y luego quieres apuntar al marcador de volumen Ahora bien, este método marcador, esto espera algunos argumentos en sí. Puedes hacer ayuda marcador de punto de volumen. Cree un simple marcador de prospecto de stock en el mapa. folleto es la biblioteca de JavaScript que te ayuda a visualizar esto. Ese es el motor que crea esos mapas en el navegador. Python crea un código JavaScript usando la biblioteca de folletos y los marcadores le permiten agregar pop pop. Cuando haces clic en un marcador en el mapa, te permite mostrar información y parámetros que necesitas para pasar un parámetro de ubicación al marcador para poder visualizarlo. Entonces la ubicación es igual a dos. Es una lista típica. Digamos, 38 punto dos y -90 91 y también puedes pasar Después de la lista, me aparece poómetro que podría ser alto. Soy un marcador. También necesito pasar el parámetro icon, que en realidad es otro objeto que viene de volume dot Con lo esperas para mí para pasar un color ahí, como, digamos, verde. Básicamente, eso es todo. Asegúrate de que tus corchetes sean correctos. Aquí tengo tres corchetes, tres corchetes de cierre y uno y dos, y tres soportes redondos de apertura. Bien. Guarde un script, vaya a la otra terminal y ejecute. Ve a Firefox para cargar, y aquí tienes un marcador. Si hago clic, me sale el mensaje emergente en una bonita ventana aquí. Así es como agregas marcadores a tu mapa. No obstante, te sugiero que sigas un enfoque ligeramente diferente para agregar niños a tu mapa. Lo que sugeriría es crear realmente un grupo de entidades de datos de volumen, grupo de entidades. Pero y le puedes dar un nombre como mi mapa. Entonces lo que sucede es que en este grupo de entidades, el marcador es una entidad con grupos de entidades, puede agregar varias entidades al grupo de entidades. Entonces puedes agregar un marcador, puedes agregar polígonos, etcétera. En lugar de decir mapa, haces el objeto de grupo de entidades, la variable que he creado aquí, estoy pasando aquí. Entonces después de eso, haces mapa a niño. Y pasa el grupo de características ahí dentro. Esto es más. Esto se hace para mantener tu código más organizado, y también te ayuda más adelante cuando quieras agregar una capa, una entidad de control de capas en tu mapa para permitirte activar y desactivar las capas. Veremos esto más adelante. Guarda este guión y déjame probarlo. Bastante baja la página. Entonces no tenemos ningún cambio. Las cosas funcionarán igual, lo que significa que el grupo de características está funcionando bien. Pero como dije, es bueno mantener organizada la llamada y también te ayuda más adelante cuando agregas una entidad de control de capas. Eso es lo que quería enseñarte por ahora y luego hablaré contigo. 91. HTML y Python: uso de bucles para agregar varios marcadores: Genial. Pudimos construir este mapa en la conferencia anterior. Tenemos un mapa base y tenemos una característica de marcador aquí. Este es nuestro código. Ahora en esta conferencia, te mostraré cómo agregar múltiples marcadores a tu mapa. La forma de hacerlo es una de las formas de hacerlo es escribir esta expresión varias veces. Eso me gusta, y claro, hay que cambiar las ubicaciones de esos marcadores. Guarde el script y ejecute la recarga, y así tendrá múltiples marcadores. Como te das cuenta no es posible agregar múltiples marcadores con un solo método. Con un solo método de marcador, es necesario aplicar el método varias veces. Sin embargo, esto no es muy inteligente de hacer. Esa es la belleza de la programación. Puede usar un bucle for para agregar realmente múltiples marcadores al mapa. Estamos hablando de Python for loop, que es una de las características fundamentales de Python. El bucle cuatro no tiene nada que ver con el volumen. Digamos para las coordenadas, claro, necesitarías alguna entrada con las coordenadas. No lo sé, así. Digamos una lista de listas. Tenemos estas dos coordenadas. Déjame copiar esto. Ponlo ahí y otra vez y déjame cambiarlos a nueve y siete. Entonces necesitas sangrarlo con cuatro espacios en blanco. Voy a explicar esto en sólo un rato. Entonces en la ubicación, tendrías que pasar las coordenadas. Antes de explicar el código, déjame probar esto. Ejecutar, ir a recargar, todavía tenemos los marcadores ahí Por supuesto, la ubicación cambió de la anterior porque cambié las coordenadas y aquí. Entonces, ¿cómo está funcionando esto? Bueno, estoy iterando con un bucle for a través de esta lista de listas Los ítems de la lista de esta lista principal son otras dos listas. Los artículos pueden ser cualquier cosa. En este caso, hay dos listas. Lo que sucede es que la variable de coordenadas. En la primera iteración, obtendrá este primer ítem de la lista, y pondrá esa pequeña lista, así que 32.2 Pondrá esa lista aquí. Básicamente, esto se pondrá aquí. Más o menos. Esa es la idea. Entonces en la siguiente iteración, las coordenadas buscarán esta otra lista y la pondrá aquí nuevamente, y así el método marker se ejecutará dos veces Entonces, la primera vez que generará un marcador con estas coordenadas y la segunda iteración, generará un marcador con estas coordenadas. Eso es. Sin embargo, aquí tenemos un pequeño problema. El problema es que en realidad, no se puede simplemente escribir las coordenadas en una lista de Python. Digamos que tienes 1,000 coordenadas que necesitas para mapear en un mapa y es difícil escribirlas aquí o incluso pagarlas, copiarlas y pegarlas del documento de aquí. La solución a eso es que tus coordenadas normalmente en la vida real, vendrán como tal vez un archivo de texto, como un archivo de texto separado por comas, CSV, archivos Excel, etcétera Desea cargar ese archivo en Python, y luego desea agregar los valores de ese archivo en el método marker. Puedes hacer eso usando un bucle for y ¿cómo lo haces exactamente? Bueno, eso lo explicaré en la próxima conferencia. Te voy a dar un archivo separado por comas con muchas coordenadas, y vamos a usar eso en este script. Hablaré con usted más tarde. 92. HTML y Python: procesamiento de archivos mediante la adición de marcadores desde archivos: Hola. En la conferencia anterior, pudiste construir este mapa con múltiples marcadores. Este mapa pasa a tener solo dos marcadores, pero te das la idea y el guión fue este de aquí, así puedes agregar tantos pares de coordenadas como quieras aquí. Pero en esta conferencia, quiero mostrarles cómo agregar pares de coordenadas a partir de un archivo de texto, que es este de aquí, volcanes puntean TXT Si lo deseas, puedes simplemente renombrar el nombre de esto a partir de volcanes que texto volcanes ese CSV, entonces puedes abrirlo en un programa como Excel Si quieres, puedes mostrarlo en un archivo de texto plano como lo estoy haciendo aquí. Python puede leer tanto CSV como textfils. Lo que tenemos aquí son algunos datos sobre los volcanes. Básicamente, tenemos el número del volcán, que es algún ID, volcán 020 Tenemos otro número más entonces como ves, cada columna, tenemos columnas en este archivo de datos y cada columna está separada por una coma Este es el nombre de la primera columna, el primer valor de la primera columna es este de aquí, entonces es el nombre de la segunda columna. El primer valor de la segunda columna es este de aquí, luego el segundo valor de la segunda columna es esta respuesta uno, y luego tenemos una columna de nombre, el nombre del volcán y aquí. Lo siento, el nombre está aquí, Baker y luego la coma comienza aquí, lo que significa que la ubicación es esta de aquí, Estados Unidos Washington Entonces tienes estatus histórico para el primer volcán y luego tenemos la elevación, que es esta de aquí. No estoy seguro si estos son en pies o metros, pero puedes averiguarlo. Si tienes curiosidad, puedes hacer una investigación para este volcán en particular y comparar la elevación. En fin, entonces tenemos un tipo de volcán. Tienes un marco de tiempo, que es D tres, no estoy seguro de lo que esto significa, D cuatro. Entonces, por último, aquí es donde nos interesa. Tenemos las columnas lat y largas. Esto es tarde, lo que significa latitud y esta es longitud del volcán. Entonces necesitas estos dos valores numéricos para mapear las entidades, los volcanes en un mapa, en este caso, en un mapa de volumen Esto tiene alrededor de 63, en realidad 62 63 incluyendo el encabezado de los datos. ¿Cómo cargamos esta caída en Python? Bueno, para cargar esa caída en Python. Déjame despejar el terminal y primero necesitarías instalar una biblioteca muy útil llamada Pandas Vamos a usar esta biblioteca más adelante así que no voy a explicar los pandas en detalle por ahora porque solo vamos a usar una o dos de sus funciones, que voy a explicar en esta conferencia Adelante e instala pandas si no tienes Pandas. Instalar pandas o PIP tres instalar pandas dependiendo de cómo hayas configurado Python, y luego puedes seguir adelante y abrir una Importar pandas. La forma de cargar un archivo con Pallas es apuntando a Pallas que leen CSV, volcanes TXT, asegúrate de que tu sesión de Python haya sido abierta en el directorio donde está tu volcán ese archivo TXT Por ejemplo, mi sesión está dentro de la carpeta de mapeo, que es esta de aquí, así que solo puedo pasar un nombre de archivo. De lo contrario, es posible que tenga que pasar la ruta absoluta del archivo que comienza desde C slash y así sucesivamente, dependiendo del sistema operativo en el que se encuentre y ejecute eso y llame a los datos y obtenga los datos impresos así como así Panda es en realidad la matemática CSV leída es capaz de distinguir entre estas comas, donde están las comas, y crea un formato de datos estructurados web con columnas Si vas aquí abajo, tienes algunas columnas aquí, columna columna, columna y luego hasta el final. Entonces tienes otras columnas porque Python no puede imprimir en realidad, el terminal no te permite tener todas las columnas en una dentro de esta área aquí porque sería demasiado. De todas formas, tienes elevación de estado, tipo timeframe, lat y long Eso es sobre los datos. Ahora necesita encontrar una manera de iterar a través de ese marco de datos Esto se llama marco de datos. El objeto de datos se denomina marco de datos. Se puede verificar su tipo en realidad. Marco de datos PanascFrame. Lo que estoy pensando es en crear realmente dos listas a partir de estas columnas de marcos de datos para poner la columna de latitud en una lista de Python y la columna de longitud en otra lista de Python para que tengamos un objeto Python nativo, que es una lista, y luego podamos iterar a través de esa lista usando los cuatro bucles Déjame tratar de hacerlo. Importe Pandas y, a continuación, cree el objeto de marco de datos Cargando los datos, leí CSV volcán TXT, eso es todo. ¿Cómo convertimos una columna de dataframe en una lista? Bueno, la forma de hacerlo es simplemente haciendo digamos L o T datos egal y luego el nombre de la columna, que es LT para que puedas obtener una lista de columnas por cierto, haciendo columnas de puntos de datos. Aquí ya ves, tienes una columna lat y una larga. Entonces haces eso igual a enumerar enumerar entre corchetes, ciérralo. Lo que hiciste aquí son datos con un atributo solitario ahí, devolvemos un objeto serio. Pero ese serio objeto, lo estamos convirtiendo en una lista neativa Esa será una lista de Python. Esto también se mostrará como un objeto similar. Se trata de un objeto serio. Esta es una lista, pero prefiero trabajar en una lista porque trabajar en listas es más rápido que trabajar en series de marcos de datos. La idea es tener aquí dos listas. Eso equivale a enumerar en copia que pegó aquí, lo mismo va para la longitud Lat y larga lista. Entonces tenemos que tener cuidado aquí en cómo iteramos a través de estas dos listas porque lo que tenemos es que tenemos dos listas y cada una de ellas tiene 62 ítems Se puede verificar eso usando un aquí, aquí abajo, que así tiene 62 ítems y lo mismo va para la lista de longitud. Eso significa que el primer ítem de la lista de latitudes corresponde al segundo ítem de la lista de latitudes, lo siento, de la lista de longitud. Los dos primeros elementos conforman la primera ubicación del primer marcador. Eso significa que en la primera iteración, necesitamos extraer ambas ubicaciones En realidad, esta estructura ya no será apropiada. Lo que hay que hacer es pasar por digamos variables lat y préstamo. Cuando iteras a través de dos listas al mismo tiempo, necesitas usar la función zip y luego va lat y lone Básicamente, lo que hace esta función es así. Digamos por I, J y Zip. Digamos que la primera lista es 123. El segundo es 456. Imprimir, yo y J. Esto es lo que pasa. Este bucle pasará por estas dos listas al mismo tiempo. Lo que pasa es que voy a pasar por el primer ítem de la primera lista mientras que J pasará por el primer ítem de la segunda lista. En la primera iteración, se extraen uno y cuatro. Uno, aquí, y cuatro aquí. Y puedes hacer tal extracción usando la función ZIP. De lo contrario, no podrás hacerlo si no usas la función ZIP. Entonces ZIP distribuye los artículos uno por uno. Y así lo mismo va aquí, LT obtendrá el primer ítem de esta lista. L uno obtendrá el primer ítem de esta lista. Y luego aquí, lo que necesitas hacer es construir una lista con LT y LN. Sí, eso es. Guarde el script, vaya a la terminal a ejecutar. No está aquí, la terminal. Acabo de salir de eso. Python tres, mapa un punto f corte. Sin errores, ve a Firefox y vuelve a cargar. No tengo marcadores por alguna razón, pero no obtuve un error. Este es uno de esos escenarios donde no se obtiene un error en la terminal. En ese caso, debes verificar tu código cuidadosamente. Paneles de datos tres CSV, vamos a datos solos. Aquí está el error. Lo que está pasando es que estoy asignando la columna equivocada a la lista de latitudes Déjame cambiar el orden y volver a intentarlo. Así que no te dejes intimidar por los errores. Los errores ocurren todo el tiempo. Solo necesitas estar a sangre fría y leer los errores si obtienes algún error aquí y también mirar el código cuidadosamente Déjame recargar. Ahora tengo algunos marcadores. Estas son las ubicaciones de los volcanes en el Norte en EU, en realidad, Estados Unidos Bien. También tienen este pop up, que está funcionando bien, pero supongo que no te gusta mucho porque no está mostrando ninguna información. Lo que tenemos que hacer aquí es hacer que este pop up sea realmente dinámico para que muestre alguna información real. Te mostraré cómo crear pop ups dinámicos en el siguiente video. Hablarte ahí. 93. HTML y Python: manipulación de cadenas: Hola, otra vez. En este video, te voy a mostrar cómo agregar los valores de elevación. Estos de aquí a la ventana emergente. Actualmente, nuestro guión simplemente imprime esta cadena en la ventana emergente. Vamos a cambiar eso. La forma de hacerlo es cargando primero los datos de elevación en una lista de Python. Entonces en el bucle aquí, quieres decir, digamos L en Z plat lone Lv así Aquí en el argumento pop pop, pasas el atributo L. Nuevamente, creamos una lista que se llama F, variable LV. Esa será una lista de todas las elevaciones y luego iteramos a través de estas tres LT obtendrá el primer ítem de let, LN obtendrá el primer ítem de préstamo, L obtendrá el primer ítem de LF y esos artículos se distribuirán en esta función aquí. LT aquí adentro, LN aquí y L aquí adentro, EL aquí adentro. Ahora, quiero guardar esto y ejecutar, pero espero obtener un error quiero que veas el error para que también te familiarices con el manejo de errores. El error está ocurriendo en la línea 14. En este archivo, mapa un punto pi, que es nuestro archivo, la línea 14 está aquí. Esta es una línea y luego tenemos al niño Pop Up. Parece que este error tiene que ver con un objeto emergente. Diré que este no es un muy buen mensaje de error en realidad. Es difícil leer este error y solucionarlo. No muy buena información dada por volumen aquí, pero de todas formas, tenemos algunas pistas. Pop esto dice name child name atributo o nupiFlow 64, objeto no tiene atributo, obtener Parece que volume está tratando de aplicar estos métodos get name, que es un método dentro de la base de código de volumen, y está tratando de aplicarlo a un número. Creo que esta L de aquí es en realidad un número. Puedo verificar eso diciendo tipo de impresión, guardar ejecutar el script De nuevo, aquí hay un tipo. Se trata de un num pi float 64. Básicamente, es de tipo flotador. En realidad es un flotador especial de biblioteca numpi. Pero de todos modos, se le puede llamar un flotador. Entonces es un número, no es una cadena. Pero si miras ayuda lo siento, volumen de ayuda, marcador de punto, verás que el parámetro emergente espera una cadena de ti como entrada. Pero en cambio, estás pasando un número flotante. Entonces no quieres hacer eso. Lo que quieres hacer es simple, simplemente conviertes ese número de flujo en una cadena. Guarde el guión. Ir a la terminal. Ejecute de nuevo. Vaya a Firefox, vuelva a cargar y obtendrá la elevación que se muestra correctamente Sí, eso es todo. También puede que desee estilizar lo que está mostrando para agregar más información allí, como más medidores de espacio Estoy agregando la cadena a cada información de ventana emergente para todos los números de elevación. Estamos hablando de 2,447.0 metros. Esa es la elevación del volcán. Sí, esa es la idea. Espero que esto haya sido claro y hablaré con usted más tarde. 94. Uso de funciones: crear una función de generación de color para marcadores ++: Hola de nuevo y bienvenidos a esta nueva conferencia. Lo que tenemos hasta el momento es este mapa con estos 62 marcadores, cada uno de ellos representando una ubicación de volcán en Estados Unidos. Sin embargo, este mapa no es muy inteligente, por así decirlo, la única información que transmite este mapa es la ubicación de los volcanes Y también tienes un mapa base. También hay un buen aspecto de este mapa porque puedes extraer información así si haces clic en los iconos. Sin embargo, es posible que desee transformar este mapa para mostrar realmente un atributo en lugar de solo ubicaciones de volcanes. La forma de hacerlo, puede haber diferentes formas, eso depende de tu conocimiento sobre la citografía, pero podría hacer que el mapa muestre un atributo aquí Por ejemplo, podría cambiar los colores de estos marcadores para mostrar realmente el rango de elevación. Digamos que podemos categorizar estos marcadores en tres colores. Digamos verde, naranja y rojo, verde sería para elevaciones 0-1 mil metros, por ejemplo, o 2,000 metros y naranja sería de 2000-3 mil metros, y entonces los marcadores rojos representarían volcanes con una elevación superior a los 3,000 Entonces, ¿cómo lo hacemos con volumen? Volvamos al átomo. Aquí está nuestro código, lo que tenemos hasta ahora. Actualmente, lo que estamos pasando al argumento icono es un argumento de color con un valor de verde. Básicamente, lo que tenemos que hacer, necesitamos hacer estas dinámicas para que el color cambie dependiendo de la elevación. Desafortunadamente, no podemos hacer eso con volúmenes. El volumen no tiene funcionalidad nativa para crear colores dinámicos para tus marcadores. Por lo tanto, necesitamos ser un poco creativos aquí y usar las funcionalidades centrales de Python para hacer esto. Cuando piensas en dinámicas, pienso en funciones. Básicamente, este bucle está pasando por latitud, elevación de longitud y luego pasa esos tres valores a esta expresión de aquí. Sin embargo, el color se está pasando una cadena siempre. Pero, ¿cómo lo cambio dependiendo de la elevación, por ejemplo? Bueno, la forma de hacerlo es creando una función, una función que obtiene como elevación de entrada y luego realiza algunas acciones dentro de la función, luego devuelve un color dependiendo del valor de elevación. Se puede decir, si la elevación es menor que esto, dame color verde, una cuerda verde aquí. Y así sucesivamente y así sucesivamente. Para que te hagas una idea, la forma en que esto funcionaría es, déjame escribir la función aquí. Este sería un buen lugar para hacerlo antes de crear un objeto de mapa. Pero siempre siempre necesitas crear una función porque voy a estar llamando a la función aquí, así que necesitas crear la función antes esta expresión de aquí y hacia arriba. Voy a estar creando eso aquí. Llamemos a una función llamar a un productor. Mantengámoslo simple por un tiempo, solo para demostrarte cómo funcionaría esto. Vamos a mantenerlo muy, muy sencillo. Digamos que regresa verde. Si cambias esto a productor de color y no olvidas los corchetes, pasando corchetes, eso significa que estás llamando a la función. Si no pasas los corchetes, eso significa que solo estás llamando al nombre de la función y no estás ejecutando la función. Yo sólo lo voy a mantener así y seguir adelante y ejecutar mapa un punto pi. Todo bien. Recarga y obtendrás lo mismo Porque lo que pasa es eso. Esta cosa de aquí, esta función carbón será igual a lo que sea que devuelvas aquí. El tipo de este objeto es en realidad una cadena. Es exactamente la cuerda verde. Por lo tanto, ahora puedes agregar algunos condicionales aquí. Básicamente, necesitas pasar una entrada aquí, elevation, déjame escribir cualquier variable que te guste, escribir elevation y aquí, necesitas pasar L. L para letlon L, digamos que tenemos 62 filas en la tabla de datos y for loop pasará por la primera fila de la tabla Obtendrá elevación y la pasará a esta llamada de función. La función pasará L a elevación, entonces usted dice aquí, si la elevación es menor 1,000 entonces se quiere a 1,000 entonces se quiere volver verde para que la elevación sea menor a 1,000 metros. Una elevación foliar es de entre 1,000 metros, es mayor de 1,000 metros o menor que Let's 3,000 metros. Regreso naranja. De lo contrario, regresa rojo. Se devolverá el rojo si no se cumple ninguna de estas condiciones, lo que significa que la elevación no es menor de 1,000 metros ni de 1000-3 mil Lo que significa que lo que queda es mayor a 3,000 metros. En ese caso, volveremos al rojo. Para conocer esos valores, en realidad, necesitas hacer un poco de exploración de datos. Por ejemplo, es posible que desee mirar los datos rápidamente así para ver qué valores tiene. Y luego decidir el umbral de categoría. Pero también puedes hacer análisis estadísticos más significativos puedes hacer un histograma y ver la distribución de datos para luego decidir sobre estos valores Pero mantengamos las cosas simples y decidamos estos valores. Voy a resolver esta comprobación si todo está en su lugar solo rápidamente. Déjame probar el código. Ve y vuelve a cargar Tenemos algunos colores diferentes aquí. Sí. Esto se ve bien. Déjame verificar los valores. Por ejemplo, el naranja está entre 1,000 metros y 3,000 metros. Lo estamos haciendo bien. El rojo está por encima de los 3,000 metros. Parece que está funcionando. 95. HTML y Python: cómo agregar y estilizar marcadores: Todo bien. Espero que resuelvas el ejercicio, pero no te preocupes si tu mapa se ve un poco diferente al mío. En fin, aquí están mis marcadores, marcadores de círculo, en realidad. Y tengo marcadores verde anaranjado rojo y naranja. Entiendes la idea. Y también tienen algún tipo de opacidad Entonces he establecido un valor de opacidad de 0.7, lo que significa 70% para ellos. Como ves, puedes ver el marcador que está debajo de este de aquí. En fin, aquí hay un código. Déjame explicarte lo que cambié del anterior del código original. Cambié marcador a marcador circular. La ubicación sigue siendo la misma. También el atributo pop up sigue siendo el mismo. Y luego agregué aquí un radio de seis, lo que significa seis píxeles. Ese es el tamaño de esos marcadores de círculo. Después agregué un color de campo. El atributo de color del campo es para el área interna del círculo. Ves esta zona naranja, pero también tienes aquí este color exterior que puse gris y lo haces con el argumento del color. El color es igual al gris para todos los marcadores. El color por defecto será el negro, que creo que es un poco pesado para la vista. En fin, aquí hay una opacidad de campo. Por la transparencia, se lo dije a 0.7, y ya está. Espero que esto quede claro ahora y hablaré con usted después. 96. HTML y Python: trabajar con datos JSON: Hola, bienvenida otra vez. En esta conferencia, te mostraré cómo agregar otra capa a este mapa. Actualmente tenemos dos capas. Tenemos el mapa base, que son teselas de mapa por cuadro de mapa, puedes ver aquí, y los datos son servidos por el mapa de OpenStreet y también tienes tu capa personalizada, que es una capa que contiene marcadores de círculo En los sistemas de información geográfica SIG, estos se denominan capas. Ahora me gustaría agregar una tercera capa a mi mapa, esa será una capa poligonal Esta capa actual con marcadores, esta puede denominarse capa de puntos. También tiene capas de línea y capas poligonales. Con puntos, los puntos son mejores para representar ubicaciones y tienes líneas, las líneas son mejores para representar entidades geográficas que se asemejan a líneas como carreteras y ríos. Entonces tenemos polígonos. Los polígonos son los mejores para representar áreas. Por ejemplo, en esta conferencia, lo que te voy a mostrar es cómo agregar una capa, una capa poligonal que representa población mundial por país Los países están representados como áreas. Y lo que vamos a hacer es que cada uno de los países tendrá un color específico que indicará la población de ese país. Puntos para ubicaciones, líneas para líneas y polígonos para áreas Ahora, por supuesto, necesitas tener algunos datos para crear una capa poligonal Al igual que hicimos con los marcadores, teníamos algunos datos en CSV en formato de texto. Y luego usamos esos datos, los abrimos con pandas y luego iteramos a través esas líneas de los datos y agregamos los marcadores al mapa Ahora, para los polígonos, la forma de agregar polígonos vía volumen es usando el método volume Básicamente, déjame hacer algo de espacio aquí, la forma en que esto funcionaría es. Desea agregar a la variable de grupo de entidades aquí, desea agregar un hijo, que sería un objeto Geo JSON de volumen. Este es el método con corchetes aquí. Eso crea un objeto GeoJSON. Para los datos GeoJSON, utilizaremos este archivo JSON de punto mundial. Esto lo puede encontrar adjunto en esta conferencia. Déjame explicarte qué es esto, pero cuidado no lo abras en átomo porque si tu computadora es un poco lenta, tu átomo puede chocar. Intenta abrirlo con un editor más ligero como Notepad, por ejemplo, o CAT en terminal Linux o Mac En fin, este es el archivo JSON. Se puede referir a ella como JSON o GeoJSON. En realidad, GeoJSON es un caso especial de JSON. Básicamente, el formato es siempre el mismo. Comienza con llaves y básicamente, contiene una cadena que es como un diccionario Python con claves y valores. Teclas clave y valor donde este corchete termina en algún lugar de aquí, creo, si no me equivoco. Ahora bien, éste termina aquí. Sí. Entonces tienes la otra geometría clave. ¿Qué es la geometría? Bueno el tipo de geometría es multipolígono. Básicamente, tienes estos atributos que describen los datos. Escriba coordenadas multipoligonales. Esto comienza ahora a describir las características, los polígonos Estas son las coordenadas del primer polígono que se mostrará en el mapa Digamos que este es un país específico que es Antigua y Berbuda Un país pequeño, pero de todos modos. Estas son las coordenadas que determinarán la ubicación del polígono en tu mapa Básicamente volumen leerá toda esta información y decidirá dónde poner los polígonos Entonces también puedes usar otros atributos de esta como población, que está aquí, usarás este valor poblacional para ponerle un color a esa población. Y así sucesivamente y así sucesivamente, tienes a todos los países del mundo en este archivo JSON. Dedique unos minutos a mirar este archivo para entender su estructura. En la siguiente conferencia, seguiré adelante y cargaré el archivo JSON en Python y mostraré la capa poligonal Nos vemos ahí. 97. Python y JSON: añadir una capa de mapa de población: Genial. En la conferencia anterior, te mostré cómo se ve un archivo JSON. En esta conferencia, seguiré adelante y agregaré ese archivo JSON al código. Recuerda, te proporcioné el archivo JSON. En la conferencia anterior, se podría descargarla de los recursos de la conferencia. Entonces este método GeoJSON obtiene un atributo de datos que es igual al objeto file de los datos JSON Básicamente, necesitas crear un objeto de archivo Python que puedas crear con open. Recuerde, open es un método clásico de Python para crear objetos de archivo. Ahí va la ruta sobre el archivo. Esto pasa a estar en el mismo directorio con mi script Map one dot py. Sólo estoy pasando por JCO mundial. Básicamente lo estoy abriendo en modo lectura. Lo voy a dejar así por ahora, guardar, ejecutar. Creo que aquí vamos a obtener un error. Sí, necesitamos agregar un parámetro de codificación ahí como lo sugiere el mensaje de error. Eso va dentro del método abierto. Equivale a UTF ocho SIG. Di otra vez, ve y ejecuta load, y tenemos los polígonos mostrados en el mapa Eso fue bastante fácil de hacer. Algo que debes saber es que también puedes sumar puntos a través de GeoJSO En este caso, agregamos polígonos, pero ese archivo JSON también podría tener líneas o también podría tener puntos en sus atributos Entonces este teníamos un atributo que estaba afirmando, estos son polígonos múltiples, pero esto podría ser puntos o líneas En ese caso, el volumen mostrará esas entidades dependiendo de este tipo de atributo aquí. Por supuesto, también tendrías el atributo de coordenadas con las coordenadas de la línea. Los puntos donde la línea se rompe y gira en el caso de los puntos, tendrías pares de coordenadas aquí. Espero que entiendas la idea. Eso fue sobre esta conferencia. En la siguiente conferencia, te mostraré cómo crear un mapa de coropletas, que es un mapa que utiliza coloración de áreas para En este caso particular, lo que hacemos es que tendremos estos polígonos con diferentes colores para representar a la población del mundo para qué país Eso lo haremos en la próxima conferencia. Nos vemos. 98. Python y JSON: estilizar la capa de población: Hola, otra vez. En esta conferencia, te mostraré cómo hacer un mapa de país por población. Estaremos mostrando población de cada país a través de colores graduados. Entonces pensaremos en una gama de colores para representar población de baja a alta. Tenemos esa información en nuestro archivo JSON w dot, que se almacena en este atributo pop 2005. Pop 2005 significa población a partir de 2005, que es bastante antigua, pero no debería ser un problema con fines educativos. Entonces volvamos al código y a la forma cambiar el color de esos polígonos porque por defecto, tenemos este color verde También hay transparencia en los polígonos. Se puede ver el mapa base en el fondo. Para cambiar eso, es necesario acceder al argumento de la función style. Pero he estropeado algo aquí de la conferencia anterior, lo que podría ocasionar algunos problemas después Esto no tiene que estar entre paréntesis, así que borre ese de aquí también. Entonces tenemos uno, dos, tres corchetes abiertos y tres corchetes de cierre. Ahora bien, debería estar bien. agregar otro argumento a GeoJSON Este es el primer argumento. Los datos son el primer argumento que termina aquí. Agrega otro argumento de función de estilo, y realmente puedes romper la línea aquí. Eres libre de romper líneas en Python cuando la expresión está entre corchetes entre corchetes, corchetes o corchetes. En este caso, esta expresión está entre corchetes, así que somos capaces de romperla y es bueno romperla en coma La función de estilo es igual a, ahora esto espera una función Lambda. Las funciones lambda son como funciones, funciones normales, pero están escritas en líneas simples de código. Por ejemplo, digamos que L es igual a Lambda. Esta es una función Lambda X en potencia de dos. Oh, perdón, tenía un error tipográfico ahí, no y bub sino cordero Otro A es una función aquí igual que tendrías una función normal, y luego puedes llamar a L. Puedes pasar un valor como cinco y eso devolverá cinco en potencia de dos. Como puedes ver, puedes escribir la función en una sola línea. Esto también puede ser útil en otros casos como este de aquí que verás en solo un poco. Lambda X. Esto también permite escribir funciones anónimas. Esta función, no tiene nombre. Como aquí, le asigné un nombre a esta función porque necesitaba llamarla más tarde. Pero este de aquí, no necesitamos llamarlo más tarde, así que no es necesario que le des un nombre. Aquí, la sintaxis sería correcta si lo hago así. Sigamos adelante y hagamos esto. Rellenar color con una C mayúscula, F minúscula, casc superior y Eso debe estar Digamos, amarillo. Ahora, si quieres, puedes dejarlo así. Guarde el guión. Salga del shell de Python y ejecute el script. La ejecución salió bien. Déjame revisar el mapa, recargar y verás que los colores de los polígonos cambian Así es como puedes cambiar los atributos de tu archivo JSON. A decir, básicamente agregas este atributo que no está en el archivo JSON si lo buscas. No encontrarás nada inser. Ahora puedes jugar con esto agregando condicionales dentro de este diccionario, como I X propiedades Pop 2005 es menor que digamos 10 millones, diez, uno, dos, tres, uno, dos, tres, uno, dos, tres Lo que estoy haciendo aquí es que estoy diciendo que establece el amarillo al quinto color si X representa la característica adyacente aquí. Si las propiedades realmente si el atributo Pop 2005 de este atributo de este atributo que está aquí, este es Pop 2005. Sé que esto es un poco complicado. Déjame tomar una envoltura de software. Ahora tengo todos los envoltorios de texto aquí en la vista y aquí Pop 2005 es en realidad parte de este diccionario hasta aquí. Este diccionario, estos son un conjunto de propiedades. Este diccionario es el valor de esta clave de la clave de propiedades. Lo que eso significa es que estamos accediendo al valor del esquema de hélice usando esta sintaxis, que se conoce en Python. En tanto, X propiedades, lo que es X aquí representa características. Entonces estás accediendo a propiedades desde entidades. En el fondo, esto es un poco de caja negra pero volumen, lo que hará el volumen es que pasará por todas las características de todos los polígonos y comprobará si el valor del pop 2005 es menor a 10 millones, y si lo es, entonces establecerá este color para llenar atributo de color Eso es más o menos sobre eso. Creo que es mejor poner este verde. Si es menos de 10 millones, ponlo verde si no Naranja. Si entre 10 millones, haz lo mismo aquí. Propiedades, en realidad, puedes romper el código aquí. Entonces propiedades Pop 2005 vamos a poner aquí 20 millones. Estos son solo números arbitrarios. Puedes poner todo lo que quieras, pero eso afectará cómo clasifican tus polígonos se colorean Para la población 10000000-20 millones, obtendremos colores anaranjados De lo contrario rojo. Todo lo que esté por encima de diez será coloreado como rojo. Guarde esto y espero que esto funcione. Sin errores. Recargar Tenemos a EU coloreado en rojo porque tiene una población superior a 20 millones de personas, parece estar funcionando bien. Sí, Portugal Portugal tiene una población de alrededor de 12 o 15 millones de personas. No estoy segura. Está en el rango medio de nuestro algoritmo de clasificación. An, eso es más o menos sobre eso, y si quieres, puedes hacer preguntas. Estaré encantado de ayudarte y luego hablaré contigo. Gracias. 99. Python y JSON: añadir un panel de control de capa +: Hola, y bienvenidos de nuevo a otra conferencia más sobre mapeo web con Python y volumen. Este es el mapa para el que construimos esto y contiene una capa base, una capa poligonal y una capa de marcador . Este es nuestro código. Ahora bien, lo que quiero hacer en esta conferencia, quiero implementar una función que me permita activar y desactivar las capas personalizadas. Con capas personalizadas, me refiero a la capa de polígono y la capa de marcador porque no es a la capa de marcador porque no es posible desactivar el mapa base al menos hasta donde yo sé No tendría sentido apagar la capa base. No quieres una página en blanco. Entonces vamos a ver cómo hacer eso. La característica clave aquí es clase de control de capa del módulo de volumen, que se puede agregar así. Desea señalar el objeto de mapa al que desea agregar un hijo. El control de capa se agrega como hijo. Control de capa de volumen. Ahora bien, esto no va a funcionar. Pero todavía quiero ejecutar esto para que no cometas este error más adelante. Déjame recargar la página. Aquí sólo se ve el mapa base, no hay capas en absoluto. La razón por la que esto no funciona es que cuando agregaste control de capa al mapa, aún no habías agregado el grupo de características, que es un objeto que contiene la capa Jason y la capa de marcador. Entonces básicamente control de capas estaremos buscando el grupo de entidades agregado al mapa, pero no lo encuentra en este punto. Por lo tanto, las cosas están en mal estado. Es importante poner esa oferta que ha agregado la capa de grupo de entidades al mapa aquí mismo. Ejecute de nuevo. Recarga el mapa y verás las capas ahí y verás esta caja aquí Cuadro de mapa brillante. Se trata del mapa base y no se puede desactivar esto. También tienes este elemento Mi mapa aquí del panel de control de capas. Este es el panel de control de capas y puedes activar y desactivar esta capa. Pero como ves, esto se está apagando y encendiendo tanto el polígono como la capa de puntos al mismo tiempo, que es algo que no quieres Seguimos adelante y cambiamos eso. Voy a explicar por qué sucede esto. Esto está sucediendo porque el control de capas, lo que hace, busca objetos agregados al mapa con un hijo como aquí. Ha agregado un hijo y solo ha agregado un hijo al objeto de mapa. Por lo tanto, el control de capas considerará ese objeto como un solo elemento del panel de control de capas. Pero ese objeto de grupo de características, contiene marcadores de círculo, pero también contiene la suma GOJ Capa. Por lo tanto, necesitas cambiar tu estrategia aquí. ¿Cómo puedes hacer eso? Puede haber diferentes formas. Una forma es crear realmente un grupo de características para volcanes Vamos a llamarlo Fg V. Agrega GV aquí y luego quieres otro grupo destacado Déjame copiar esta línea, pegarla aquí. Desea otro grupo de entidades para la población. Llamemos a esta población. Llamemos así a esto volcanes, cambiemos el nombre de la variable FGP, FGP aquí, FV allá Agregar un alpachild que tiene que ser FG P para la población. Ahora todo se ve bien. Veamos si el control de capas podrá leer estos dos grupos de entidades ahora. Ve y vuelve a cargar el mapa se ve bien. Volcanes funcionando bien, población también. Todo está funcionando bien. Esto es un mapa. Si pudiste construir esto como yo lo hice, entonces buen trabajo. También puede optar por no usar grupos de entidades en realidad. Podrías haber agregado GeoJSON al mapa directamente. Sin embargo, para este caso para volcanes donde estás ejecutando el método at child varias veces, en ese caso, tendrías una capa por cada volcán Habrías agregado 62 hijos a tu objeto de mapa si hubieras hecho mapa sin grupo de entidades aquí. Eso significa que en este panel de control de aquí, tendrías 62 entradas, 62 capas, y eso no es lo que quieres. El grupo de características es útil aquí. Para los volcanes es necesario. Pero para GeoJSON, podrías haber usado mapa aquí y todo estaría bien Pero para mayor consistencia, es bueno agregar ambos a grupos de características específicos. Volcanes aquí y población aquí. Entonces este es el código, y espero que hayan disfrutado este programa y no dude en hacer preguntas. Hablaré con usted más tarde. Nos vemos. 100. Aplicación 2: tesauro en inglés +: Hola y bienvenidos a esta nueva sección del curso, y en esta sección inicia el trato real. Entonces en esta sección, vamos a desarrollar la primera aplicación del curso. Hasta ahora, pasabas por los conceptos básicos de Python. Aprendes funciones, bucles, condicionales y manejo de archivos, etcétera. Ahora vamos a practicar todos esos conceptos construyendo realmente programas reales que puedan ser utilizados por los usuarios en lugar de simplemente recorrer cadenas triviales y números y así sucesivamente Y entonces, ¿qué vamos a construir en esta sección? Bueno, vas a construir un programa al que puedas dar una palabra, una palabra en inglés, y el programa devolverá la definición de esa palabra en inglés. Entonces déjame seguir adelante y demostrar el programa. Estoy usando Python tres. App punto p es script. Entonces el programa te pide que ingreses una palabra, para la cual quieres la definición. Por ejemplo, digamos Montaña. Y así se obtiene la definición de montaña. Y en este caso, pasa que tiene dos definiciones. Por lo que la montaña de montaña es una característica de la superficie de la Tierra que se eleva muy por encima de la base. A, la montaña tiene otro significado, que es una gran cantidad de cosas que no se colocan en una pila. En fin, hay palabras que tienen un solo significado como las matemáticas. Espero, sí. Entonces obtienes una sola definición para las matemáticas. Pero también el programa tiene otras características, como por ejemplo si pones AN con doble N, así que con una N extra y presionas Enter. El programa en lugar de fallar, muestra un mensaje Te dice, ¿ Me llovió en su lugar? Entonces es un programa bastante inteligente que adivina la palabra que el usuario tenía en mente pudo haber tenido en mente al escribir la palabra Entonces ingresa Y en caso afirmativo, si te referías a lluvia o N si no. Oh, sí, me refería a la lluvia, entonces, ¿por qué? Y se obtiene la definición de lluvia, que pasa a tener dos definiciones. Esta es la primera, y esta es la segunda. El programa dirá, si ingresas una palabra muy aleatoria que no tiene ningún significado como ese, obtienes el mensaje, la palabra no existe, por favor revisarla porque el programa no puede encontrar una palabra similar a esta. No puede encontrar una palabra primero. Y además, trata de encontrar una palabra similar a esta, pero no lo hace porque no creo que haya coincidencia para esto. Entonces imprime este mensaje. También hay otras cosas como, ya sabes, si tienes mezcla de minúsculas ahí como R y A mayúsculas, todavía obtienes la entrada correcta ahí Entonces ese es un programa. Tiene una interfaz de línea de comandos, lo que significa que estás ingresando estás pasando la entrada a través la línea de comandos y estás obteniendo la entrada nuevamente desde la línea de comandos. No obstante, más adelante en las siguientes secciones, voy a explicar tus aplicaciones web, cómo crear aplicaciones web con Python. Entonces regresas aquí y de hecho crea una aplicación web usando el código que vas a estar aprendiendo en esta sección. Así podrás extender este programa para hacerlo más fácil de usar con una interfaz web donde los usuarios pueden ingresar la entrada a través de un formulario web, st a través de una página web y luego presionar un botón y luego obtener la salida en la página web. No obstante, el código que vas a estar aprendiendo en esta sección es muy importante. Se llama Python. Entonces vas a aprender sobre condicionales y loops. Entonces vas a implementar todos aquellos que aprendiste en la sección anterior desarrollando este programa. Entonces espero que esto te guste y te deseo éxito. Nos vemos en la próxima conferencia. 101. Comprender tu set de datos en Python +: Oye, hola otra vez. En el video anterior, hice una demostración del programa para que sepas cómo se ve el programa y cuál es la salida que genera el programa. También la interfaz del programa, que es una interfaz de línea de comandos. Ingresas los datos a través de la interfaz, el usuario ingresa los datos a través la interfaz de línea de comandos y obtienes la salida nuevamente desde la línea de comandos. Ahora he creado una carpeta aquí en alguna parte y le he dado un nombre. Puedes darle cualquier nombre que quieras dentro de esta carpeta, voy a estar poniendo todos los archivos de este proyecto. Estamos hablando de los archivos de datos como data dot JSON. Se trata de un archivo que contiene un vocabulario donde extraerá el programa, pediremos una palabra y este archivo tiene la definición de la palabra. Y también los archivos dot Pi se pondrán aquí. Conocemos la salida, ahora tenemos averiguar la manera de llegar a esa salida y vamos a tomar el enfoque paso a paso, lo que significa que primero vamos a desarrollar una versión simple del programa, solo darle una palabra al programa y el programa devolverá la definición de esa palabra. Pero esto va a ser muy sencillo porque el usuario a veces puede pasar una palabra que no existe, y como programador, hay que contar esa palabra para esa palabra no existente. En lugar de romper, interrumpir el programa, mostrar un error al usuario, es necesario mostrar un mensaje más fácil de usar al usuario Eso lo haré en los próximos videos. Pero por ahora, lo primero en lo que tenemos que pensar son los datos. Entonces hice algunas investigaciones en la web y encontré este conjunto de datos de palabras y definiciones. Ahora bien, esto es alrededor de 5 megabytes de datos. En átomo, tarda un tiempo en abrirse, así que le hice clic y sigo esperando que se abra. Ahora se abre. Si tu átomo se congela, entonces puedes abrir esto con un editor más ligero como Notepad o Nano en Mac o Entonces de todos modos, este es un archivo JSON de punto. Lo que es Jon JSON es como un lenguaje. Algunos dicen que no es un idioma, es solo un conjunto de reglas de cómo formatear algunos datos. JSON sigue este formato. Comienza con un corchete, entonces todo lo que tenemos son pares de claves y valores. Esto es como un diccionario Python. La clave está separada por el valor por una columna. este caso particular, nuestros valores están entre corchetes, lo que sugiere que a veces puede tener más de un elemento dentro de los corchetes, por ejemplo. Déjame buscar la palabra control F o Comando F. Lluvia. Eso nos llevará aquí. Primero, déjame ir a ver y Toogle soft wrap. Lo que eso hará es que se ajuste al texto dentro de mi pantalla. Por el momento, se ve que precipitación está fuera de los bonos de la pantalla. Esto también lleva un tiempo porque aquí tenemos bastantes datos. Ahora los datos se ven mejor, así que déjame buscar lluvia otra vez, encontrar así que esta es la lluvia clave, digamos, la palabra lluvia y esta es la definición de lluvia. En este caso, tenemos dos definiciones porque para algunas palabras, puede que tengas más de un significado o tengas más de una forma. Por ejemplo, esta es la lluvia como sustantivo, es una precipitación y este es el verbo para lluvia Cuando llueve para caer de las nubes y gotas de agua. Es un verbo y un sustantivo y están separados por una coma. Entonces esto es como un diccionario Python. Ahora necesitamos averiguar cómo cargar estos datos en Python. Porque para acceder a los datos de este archivo, primero necesita cargarlo en Python como un tipo de datos específico de Python, y luego acceder a los datos de ese tipo de datos. Piensa por un momento qué tipo de datos Python sería más apropiado para este archivo JSON. Piénsalo y lo mostraré justo en la próxima conferencia. Nos vemos ahí. 102. Cargar datos JSON en Python: Entonces creo que fue bastante fácil darse cuenta de que la mejor manera de cargar estos datos en Python es un diccionario Python. Esto se parece a un diccionario Python y una vez que lo cargas en un diccionario Python, entonces se vuelve muy fácil acceder a un valor para una clave. Entonces, ¿cómo cargamos esto en un diccionario Python? Bueno, déjame abrir un shell de comando aquí. Por ahora, solo voy a demostrar algo rápido en un shell interactivo de Python. Pero primero, es posible que tengas que cerrar este archivo JSON porque esto está ralentizando el átomo. No digas los cambios. De todas formas no hice ningún cambio. Python tres, eso abrirá mi Python 3.6 0.1. Pero de todos modos, aunque tengas Python dos, este programa funcionará igual. Entonces, ¿cómo cargamos JSON en un dicario de Python? Bueno, para eso, necesitamos usar la Biblioteca Estándar JSON. Con una biblioteca estándar, significa que no es necesario instalar JSON. Solo necesitas seguir adelante e importarlo. Una vez que haces eso, hay un buen método JSON dot Load ahí. Este método de carga, lo espera en realidad, puedo mostrarlo así, ayudar a JSON dot Load Esto obtiene este argumento aquí, que es un archivo como objeto que contiene un documento JSON. Estamos hablando de un objeto de archivo en Python, y necesitamos crear el archivo. La forma de hacerlo es sencilla. JSON otra vez hacer Cargar. La forma en que creamos un objeto file es mediante el método open. Eso ya lo sabes. Después se pasa la ruta al archivo. Ahora como mi terminal aquí está apuntando a esta carpeta, solo necesito pasar un nombre de archivo. No necesito pasar ningún camino completo ahí dentro. Así, puedes pasar el método R, que significa modo de lectura, o simplemente puedes dejarlo así y el modo de lectura es por defecto. Asegúrate de cerrar los corchetes dos veces. Aquí tenemos dos corchetes de apertura, dos corchetes de cierre aquí, eso es todo. Ahora, ¿qué son los datos? Los datos son un diccionario. Es un diccionario Python y puedes imprimirlo. Sí, son bastantes datos. Eso tomó un tiempo, pero normalmente no tendrás que imprimir todo el diccionario. Lo que podrías verificar es acceder a una palabra una clave del diccionario. Digamos el trapo de llave, necesitas usar soporte, perdón, cotizaciones para la llave Esto es lo que obtienes, et el valor de la palabra para el archivo clave. Ahora que ya sabes cómo funciona esto, más o menos, intenta llegar a una función que obtenga como entradas una clave y luego devuelva el valor para esa clave en particular, y también trate de incorporar la carga de adjacon fall y también imprimir la salida Si tienes problemas con eso, en el siguiente video, te mostraré cómo lo hacemos. Nos vemos ahí. 103. Haz que la aplicación devuelva la definición de una palabra: Espero que hayas descubierto cómo crear una función que obtenga una clave, una palabra y devuelva la definición de esa palabra. Permítanme construir rápidamente ese programa. Déjame llamar a esta app Los puntos en bote Jason. Datos por ejemplo ver carga JSON, datos abiertos punto JS. Eso es. Definir la función. Traducir, déjame llamar a esto traducir. Palabra, y todo lo que tienes que hacer es devolver la palabra de datos. Eso es. Entonces puedes o bien, digamos, puedes hacer algo como word eagle para arraign o puedes hacerlo dinámicamente pidiendo entrada al usuario Impresora palabra así, dejar un espacio, y luego todo lo que tienes que hacer es imprimir la salida del diccionario. Porque conoces este diccionario por ahora, simplemente devuelve una cadena, pero no estás imprimiendo ninguna salida. Si quieres mostrar esa salida en la línea de comandos, necesitas imprimir traducir word. Eso es. Ahora bien, no te confundas con estos nombres de variables. Esta es una variable global y esta también es una variable global. Definimos variable aquí y la pasamos aquí. Entonces esto lo que sea que se pase aquí va a éste de aquí. Esta podría ser una palabra diferente, un nombre de variable diferente. Entonces digamos W W. Esta es una variable local. Tiene un significado dentro la función y puede ser todo. Si pasas W aquí, tiene que ser W aquí también. Esto pasa aquí este valor a este valor. Por lo general los programadores, prefieren simplemente ingresar el mismo nombre aquí y allá Pero para ti como principiante, quería mostrarte esta diferencia que esto no tiene que ser lo mismo con esto. Guarde el script, tal vez abra otra terminal. Python tres app dot pi, ejecutar, Enter a word, Rig, y esta es la salida. ¿Qué tal estas palabras? Ahí tenemos un error desagradable. Pero no quieres mostrarle eso al usuario Porque esto no es muy legible. Rastrear la última llamada más reciente, ¿cómo contamos para este escenario en nuestro código? Es necesario que lo descubras. Piénsalo. Incluso en la próxima conferencia, haremos precisamente eso por lo que debemos tomar en consideración esa palabra que el usuario pasa puede no estar en el conjunto de claves del diccionario. La lluvia era una clave de datos Jason diccionario, pero este nombre no lo era, así que tenemos que contar para eso. Eso te voy a mostrar en la próxima conferencia. Nos vemos. 104. Cómo la aplicación trata las palabras no existentes: Bien, sigamos adelante y hagamos que este programa sea más fácil de usar. En lugar de mostrar este bloque de error, vamos a mostrar un mensaje que diga que la palabra no existe, por favor revisarla o algo así. La forma de hacerlo es, déjame ir al shell interactivo de Python. Puedes verificar algo así como esa lluvia en datos y obtienes dos. Si haces esto en datos, obtienes falso. Tenemos que hacer uso de esto y decir, si palabra en datos, esta tiene que ser W. Estamos hablando de esta variable, así que si en datos, lo que quieres hacer es devolver el valor. Este es el valor, y si esto devuelve verdadero, esto se ejecuta, s, devuelve la palabra no existe, por favor, revisarla. Cuando esto es falso, entonces se ejecuta else. En realidad, la expresión bajo else se ejecuta, y esta no se ejecuta. Como ves, esto es bastante legible, muy legible por el humor. Esta es una buena de las grandes características de Python en realidad. Puedo guardar esto ahora e ir aquí, ejecutar el programa. La lluvia funcionaría como antes. Y esto dice que la palabra no existe, por favor revisarla. Tan fácil como eso. El programa está tomando forma. Sin embargo, es necesario hacer más pruebas para verificar diferentes entradas con el fin de tomar en consideración cada entrada posible que el usuario pueda poner allí. Digamos que el usuario pone lluvia en mayúsculas y esto dice que la palabra no existe Pero en realidad, lluvia es la palabra que existe en tu conjunto de datos. Y entonces, ¿cómo contamos para distintas letras mayúsculas? También puedes tener mezcla de letras así, y sigue diciendo que la palabra no existe o incluso llueve así. La palabra no existe. Piénsalo nuevo y en la próxima conferencia, voy a poner en práctica eso, lo cual es muy fácil. Nos vemos ahí. 105. Cómo trata la aplicación las palabras con mayúsculas: Genial. Tenemos este programa ahora que devuelve un valor de una palabra que ponemos. Yo razona la definición de esa palabra. También cuenta para palabras no existentes en nuestro conjunto de datos que es el punto de datos JS. Para contar para diferentes casos de letras que podamos ingresar, puede mirar el estimado STR debería mostrarle los métodos que puede aplicar a una cadena. Aquí hay un método inferior. Lo que eso hace es si pones lluvia ahí, es, así que el método se debe aplicar con corchetes. Se obtiene lluvia la versión inferior de la letra. Ya que nuestros datos están todos en minúscula en nuestro punto de datos JS en archivo, entonces lo que haces es tan pronto como obtengas la entrada aquí, la cadena, puedes convertirla a minúscula y luego pasar esa versión a la expresión del eje del diccionario Eso sería algo así como, ya sabes, W es igual a w punto Inferior. Estamos actualizando el valor W aquí, la cadena que ingresa el usuario, y luego la W aquí se pasará como minúscula, tan fácil como Déjame hacer una prueba rápida. Lluvia y obtienes la definición correcta de lluvia. Pensemos en más valores posibles que el usuario pueda introducir. Déjame despejar la línea de comandos, para que veas mejor. Déjenme volver a llamar al programa. El clima funciona bien. Pero, ¿qué tal en lugar de poner lluvia, el usuario escribe un extra ahí dentro El programa dice que la palabra no existe, lo cual es cierto. Pero como programador, quieres que tu programa sea lo más inteligente que puedas. En ese caso, es posible que desee considerar verificar cadenas que sean similares a lo que ingresó el usuario. En, es necesario verificar si hay alguna cadena que sea similar a esta palabra. En lugar de decir que la palabra no existe, quieres sugerirle al usuario que tal vez te referías a esta palabra, de la misma manera que haces una búsqueda en Google. Eso es un poco complejo, pero no tanto. Te voy a mostrar cómo implementar eso en la próxima conferencia paso a paso. S ahí. 106. Cómo calcular la similitud entre palabras: Bueno. Como mencioné anteriormente en el video anterior, ahora hay que tomar en consideración cuando el usuario escribe mal algo. En lugar de, entran ahí un extra o algo así. En ese caso, quieres que el usuario sepa que ahí tecleó algo mal. ¿Cómo lo hacemos? Bueno, si no tienes idea de cómo hacerlo, la mejor práctica es hacer alguna investigación en Google porque el mundo de programación es muy amplio y no necesariamente necesitas conocer todas las soluciones o soluciones posibles para hacer algo Básicamente, necesitamos averiguar un algoritmo para comparar, digamos el proceso con N y la palabra real arraign con una N, el final y decir si estos son decidir si estos son similares o no, pero no hay que reinventar la rueda si alguien más lo ha hecho Por eso es necesario hacer algunas investigaciones en la web y ver si esto es algo que si hay una biblioteca que existe ahí o alguien un código fuente que lo haga, una función o algo así. Pero por lo general a menudo encuentras una biblioteca para eso. Si haces alguna investigación, te das cuenta de que puedes hacerlo usando algunas bibliotecas, y una de ellas es una biblioteca estándar y se llama D Flip. Por cierto, puedes obtener una lista de bibliotecas estándar de Python en esta página. Python.org biblioteca índice punto HTML. Este es el enlace. Aquí están todas las bibliotecas estándar que puede importar a Python. Déjame ir aquí e importar a Dilip. Esta es una biblioteca para comparar texto. Uno de los métodos es el emparejador de secuencias. Es un nombre largo, así que lo que puedes hacer es decir desde lip, Import sequence matcher Lo que hace es emparejador de secuencias. No hay que pasar ninguno ahí. Ninguno es el valor para el argumento es basura. El primer argumento es el argumento llamado basura, lo que significa que si estás comparando dos bloques de texto, en este caso, solo estamos comparando palabras. Si estás comparando dos bloques de texto y tienes algo de basura ahí, tienes líneas de rotura y espacios, entonces necesitas pasar aquí una función que ignore esas líneas No tenemos ese escenario por ahora, así que mantengámoslo simple. No pasamos ahí para ese argumento. Después pasas las dos cadenas, quieres comparar la palabra lluvia con doble N contra la palabra real lluvia y eso devolverá un objeto matcher de secuencia, que no es nada interesante, por lo que necesitas aplicar el método ratio a eso para obtener la relación real Esto indica una similitud entre estas dos cadenas en una escala 0-1 Dicen que estos son bastante similares. Ahora bien, se trata de obtener la similitud entre dos cadenas, pero lo que necesitamos en cambio es, básicamente, tenemos una lista, una secuencia de cadenas. Tenemos estas claves de diccionario. Tenemos un diccionario con muchas claves y el usuario pasa una palabra, digamos rabia con N y necesitas comparar esa palabra con todas esas claves del diccionario porque no puedes comparar RN con N con con una N en tu programa porque no sabes que esto en realidad es similar a esto. Es el problema inverso, por así decirlo. Pero Diflip tiene otra característica para eso y se llama partidos cercanos como ese Es necesario importar eso desde coincidencias DLPGClose. Pero voy a consumir esta característica en la próxima conferencia. Nos vemos ahí. 107. Cómo encontrar las mejores coincidencias a partir de una lista de palabras: Así que nos fijamos en la clase de emparejador de secuencia que devuelve el método ratio de esta clase Devuelve este número, pero ahora necesitamos ver cómo sacar la palabra más similar de una lista o de las claves de un diccionario. Centrémonos primero en es en la secuencia. Una lista es una secuencia y de la entrada de Philip, obtienes coincidencias cercanas. Ahora si ayudas, consigue cercar los partidos. Puedes ver los argumentos que puedes pasar a este método. El primero es la palabra. Esa será la palabra que pase el usuario, y luego tienes una secuencia de posibilidades. Word es una secuencia para la que se desean coincidencias cercanas típicamente una cadena. Normalmente, esta será una cadena que quieras comparar. Posibilidades es una lista de secuencias o una lista de cadenas que puedes decir, normalmente es una lista de cadenas. Entonces tienes N igual a tres. Eso definirá el número de los partidos que desea obtener coincidencias cercanas método para devolver. Digamos que pasas una lista de listas de posibilidades con seis ítems y cada ítem tiene esa relación 1-0 0-1 y este método devolverá las tres coincidencias más similares, las cadenas más similares a la palabra que se pasa aquí Puedes cambiar ese valor de argumento si quieres, y tienes un límite Esa es la proporción aquí, por defecto, esto devolverá solo aquellos artículos que tengan una proporción de al menos 0.6 o mayor que esa. Bajo eso, los partidos no incluirán. P a la ayuda y déjame probar partidos cercanos. Veamos qué obtenemos. Digamos lluvia entonces tienes una lista entre corchetes, claro. Digamos ayudar a las pirámides y a la lluvia. Dejaré la N y el corte como están por defecto. Entonces en este caso, se obtiene lluvia. La razón por la que obtienes lluvia es porque la lluvia tenía un límite superior a 0.6 o similar a Si te interesa el corte, puedes usar una coincidencia de secuencia, pero no nos interesa el valor específico Y así Rain fue el único que satisfizo esas condiciones. Aquí tenemos lluvia como lista. Podemos sacar la coincidencia cercana de una lista, pero ¿cómo sacamos la coincidencia cercana de nuestras claves de diccionario? Bueno, todavía tenemos variable de datos aquí, que cargué previamente aquí en esta sesión, cargo desde el archivo JSON. Entonces con las teclas de punto de datos. Hay un método de diccionarios, que se llama claves, y con eso, se puede obtener una lista de todas las claves del diccionario. Estamos hablando solo de las claves y de todos los valores de las claves. Estas son las palabras y cada de ellas tiene un valor asociado a ella. Básicamente, se puede comprobar el tipo de datos dot kiss, solo para ver de qué se trata. Es como un objeto de beso cavado, pero se comporta como Cualquier cosa que pudieras hacer entonces es aplicar los métodos de G matches. Pasa la lluvia ahí a datos punto beso. Veamos qué obtenemos. Tenemos tres partidos. Le llovió. Entrenar y llover. Si pasas un final de cinco, ahí obtienes más partidos. Pero es importante tener en cuenta que la lista aquí está ordenada. La primera palabra es la que tiene una mayor relación de similitud, sólo nos interesa esa primera palabra. ¿Cómo conseguir eso? Bueno, vas a ignorar este número ya que solo quieres la primera palabra y puedes pasar cero ahí porque esta es una lista y el primer ítem tiene un índice de cero, así que obtienes lluvia por la palabra mal escrita de lluvia Entonces, básicamente, tenemos el motor para sacar la palabra más similar de la secuencia ahora, y todo lo que tenemos que hacer es implementar esa funcionalidad en nuestra función aquí. Primero, solo me gustaría que el usuario sepa a través un mensaje que ha ingresado una palabra equivocada. Solo quiero avisarle al usuario para que luego puedan volver a ejecutar el programa. La próxima vez, ingresan una nueva palabra por ahora, pero después haremos algo más inteligente. Entonces por ahora, solo piensa en esto, da un mensaje donde menciones tu sugerencia con la palabra correcta que el usuario pudo haber tenido en mente. Hagámoslo en la próxima conferencia. Nos vemos. 108. Encontrar la palabra más similar de un grupo de palabras: Genial. El programa va bien. Espero que disfrutes esto. No es un programa grande así que no tenemos mucho código aquí. Pero sin embargo, esto implementa bastantes aspectos de Python. Estamos cargando datos en Python en un tipo de datos Python, y tenemos funciones, tenemos condicionales aquí, tenemos entradas de usuario y más adelante, también vamos a implementar cuatro bucles en este código Hablaremos de eso más adelante por qué necesitamos cuatro bucles. Tenemos bibliotecas, estamos importando bibliotecas aquí este es Jason. También necesitamos importar la biblioteca Diflp. En la que actualmente estamos trabajando. Centrémonos en el flip por ahora. Y la palabra que tenemos es que pasamos esta cadena con doble y aquí y tenemos un conjunto de sugerencias. Las mejores coincidencias de la palabra adentro fuera de las claves de nuestro diccionario. Pero el usuario también puede pasar una palabra que no existe en absoluto y no tiene ninguna coincidencia similar ahí así. Básicamente, tienes tres escenarios. El usuario ingresa la palabra exacta como lluvia e inmediatamente devuelves datos con esa clave en particular, ese es el primer escenario. El segundo escenario es cuando el usuario ingresa una palabra que está muy cerca de una de las palabras que tienes en tu diccionario, como lluvia con una N. extra En ese caso, quieres devolver el primer ítem de la lista que genera el get close matches. El primer escenario es cuando obtienes una lista vacía, lo que significa que no hay tal palabra similar a la de tu lista. Tenemos tres escenarios, lo que significa que necesitamos aplicar tres condicionales en el bloque condicional aquí Por el momento, sólo tenemos dos. Necesitamos uno más que diga, ¿te referías a esta palabra? Por favor, revisarla. Por ahora, solo pasaremos un mensaje y también anotaremos algo. También es posible que desee pasar allí un valor de corte más alto como 0.8 Porque a veces Si este es un 0.5 bajo y pasas alguna palabra aleatoria, eso te sugerirá algunas palabras que tal vez no quieras. Quizás quieras jugar con eso. En ese caso, se obtiene una lista vacía. Creo que voy a usar un valor 0.8 para el corte cuando lo implemente en el script aquí. Entonces vayamos a nuestro código. Lo primero que debemos verificar es si la palabra está en datos y devolver el valor de esa palabra. Te puedes preguntar, ¿y si quieres verificar primero las similitudes y no esto? Bueno, creo que la primera condición que necesitas aplicar es la que crees que va a tener más ocurrencias. Si crees que la mayoría de los usuarios ingresarán la palabra correcta, entonces primero debes verificar esa condición. No quieres que el programa pase por las condiciones que tienen menos probabilidades de suceder. Entonces primero quieres pasar por esto y luego los demás son ignorados si esto vuelve verdad. Si esto no vuelve a verdadero, si es falso, entonces quieres verificar otro condicional. Cuando verifiques más de dos condiciones, necesitas implementar la sentencia IF para múltiples condicionales. Básicamente, necesitamos verificar si esta lista está vacía o no. Si no está vacío, eso significa que tenemos una coincidencia en el diccionario. En ese caso, queremos sugerir ese partido. Queremos mencionar ese partido en el mensaje. Lo que significa que si te acercas. Lo siento. Déjame importarlo primero. A partir de la importación lib, consigue coincidencias cercanas. ALIF consigue cercar los partidos. La palabra dada en dTakes así. Este es un objeto de lista. Eso es lo mismo que este de aquí. Este es un objeto de lista y desea verificar si entonces la longitud de esa lista es mayor que cero. Si es así, quieres regresar. Mensaje, digamos, ¿ usaste un formato de cadena aquí, porcentaje. Te explicaré qué es eso. En cambio, ¿ necesitas eso en su lugar? Después de la cadena, después de haber cerrado los códigos, es el operador de porcentaje, y aquí pasa la variable que reemplazará a este formateador dentro de esta cadena Esto será reemplazado por cualquier variable que le pase todo el derecho a esto aquí. En nuestro caso, queremos pasar obtener partidos cercanos para W y claves y quieres obtener el primer elemento de esa lista y ponerlo aquí. Esto es para entenderlo. Digamos que tenemos una variable que tiene un valor de uno y tú dices, Oye, así, porcentaje A y el porcentaje S serán reemplazados por uno. Eso es lo mismo que estamos haciendo aquí. Y eso es todo lo que tenemos que hacer. Si esto evalúa como caídas, y esto también se evalúa como falso, entonces lo que eso significa es que estamos tratando con una lista vacía El usuario ingresó una palabra que no tenía ninguna coincidencia en nuestro diccionario que no tenía ninguna palabra similar en nuestro diccionario. Quieres devolver la palabra no existe. Déjame decir el guión, ve a la terminal. La tecla de flecha del apper para llamar a un comando previamente ejecutado. Python tres app un punto py, ejecutar Enter word. Déjame comenzar con una palabra correcta, lluvia, y obtienes otras definiciones para lluvia. Déjame ejecutar de nuevo, llueva con un N. extra Nos sale este mensaje. ¿Quiso decir lluvia en su lugar? Por lo que el porcentaje a fue reemplazado por el primer ítem de la lista regresar por obtener coincidencias cercanas. Nuevamente, si pasa ahí una cadena muy aleatoria, dice que la palabra no existe, por favor, revisarla. Eso es. No obstante, sigo viendo un problema con esto, todavía podemos hacer que el programa sea más fácil de usar. problema ahora es que cuando el usuario entra una lluvia por error, qué dices, simplemente le pasas un mensaje ahí diciendo eso, ¿te referías a lluvia en su lugar? Oh sí, quiero decir lluvia, pero ¿cómo puedo entrar en lluvia? ¿Por qué tengo que volver a salir del programa? Entonces estoy pensando en una solución donde en lugar de simplemente pasar un mensaje aquí y terminar el programa, en lugar de eso, ejecutas otra instrucción de entrada. Otra instrucción de entrada y otra función de entrada como esta de aquí, donde le pides al usuario que ingrese, digamos, Y si significaban trapo o N para no, y para sí, y para no, si no significaban trapo Yo sí, entonces básicamente paso, devuelves el valor por la palabra lluvia. Si le pasan no al mensaje de entrada, entonces dices perdón si esa no es la palabra a la que te referías, entonces no sabemos lo que tienes en mente. Entonces decimos que la palabra no existe, por favor revisarla. Eso es lo que estoy pensando. Si, piénsalo en esto y lo voy a implementar en la próxima conferencia. Hablarte ahí. 109. Obtener la confirmación del usuario: Genial. Como mencioné anteriormente en el video anterior, ahora vamos a implementar un mensaje extra de entrada de usuario en el programa. En lugar de devolver esta cadena, básicamente lo que quiero devolver es un mensaje de entrada. Si el programa descubre que el usuario pasó una palabra que tiene palabras similares en un diccionario, entonces quieres pedirle al usuario que ingrese Y o N. ¿Cómo haces eso? Bueno, con una función de entrada, claro. Así. Agreguemos otro mensaje fuera de la lista. Entrar. ¿Por qué? Sí. Yo, sí. O N I no. Básicamente, sea lo que sea que ingrese el usuario, es necesario procesar esa entrada esa entrada Y o N, básicamente se almacenarán en una variable pero aún no. En esta configuración que tenemos aquí, no se almacenará nada en la variable. Simplemente será un valor sobre la marcha, por lo que debes almacenar esto en una variable. Digamos Y N, así que para sí y no, es igual a eso. Entonces ahora, ya sea Y o N se almacenarán en Y y variable. Es necesario procesar esa variable. YN Águilas para, sí, ¿qué tenemos que hacer? Si el usuario pretendía decir lluvia, entonces devolvemos datos. Aquí tenemos que pasar la palabra correcta. La palabra correcta, obtenemos la palabra correcta de esta expresión. Obtener coincidencias cercanas nos dará la mejor coincidencia y necesitamos pasar esa coincidencia al diccionario de datos, así obtenemos el valor la definición para lluvia usamos esa coincidencia porque el usuario estuvo que el mejor partido era lluvia. Esto será reemplazado por lluvia y el usuario estuvo de acuerdo para ello. Espero que esto quede claro. Por favor, haga preguntas. Si esto es complicado, estaré encantado de responderte. En caso afirmativo, entonces devuélvete esto. Déjame verificar, ejecutar este paso intermedio Lo siento, utilicé el operador igual aquí, que es un operador de asignación, necesitas verificar para usar el operador de comparación, que está construido de dos operadores iguales. Guarda de nuevo el guión y sigue adelante, Ingresa palabra Lluvia. ¿Quiso decir lluvia en su lugar? Ingresa Y en caso afirmativo o N si no. Déjame entrar Y. Obtenemos correctamente las definiciones de lluvia. Genial. A lo mejor necesito mejorar el mensaje aquí, eliminar el punto y usar una columna ahí y un espacio. Eso debería ser mejor. Si vuelves a pasar la lluvia y si pasas sí o no, solo dices N, no obtienes ninguno. Porque no estás tomando en consideración la cadena N. Obtienes no porque la función no está devolviendo nada. Lo que pasó aquí es usar un pase aquí. Entonces palabra es igual a lluvia. Aquí se pasa la palabra. Y es igual a lluvia entonces comprobamos si lluvia en datos no está en datos porque es con N. Esto no se ejecuta. La función no ejecuta esta sentencia, no devuelve la definición de lluvia, sino que va a esta declaración. Esto encuentra una similitud por lo que la lista es mayor que cero, y luego va y ejecuta esto. Por eso tenemos otro mensaje de entrada aquí. Entonces continuamos ahí. Estamos sangrando bajo L si tenemos otro condicional anidado, lo cual no es problema Pero ten cuidado, hay que sangrarlo. Este es un nivel de sangría más profundo que este de aquí Aquí estamos. Si el usuario pasó, ¿por qué devolvemos esta declaración? Si el usuario pasa todo lo demás, entonces no estás contando para ese escenario en particular. Por lo tanto, no hay sentencia de retorno ejecutada, por lo que el programa terminará aquí y devolverá ninguna porque no se devolvió nada. Esto tampoco se ejecutará porque este es un nivel de sangría con éste y como éste se ejecutó, el programa nunca va a este nivel aquí Lo que tenemos que hacer es que tenemos que contar para otras entradas de usuario como N. En ese caso, si el usuario ingresa N, bueno, todo lo que podemos hacer es devolver la palabra del mensaje no existe, por favor revisarla, que es la misma que esta de aquí. Tenemos que contar para otra condición. Los usuarios pueden pasar N, pero también pueden pasar otra cadena aleatoria y no quieres que el programa devuelva ninguna, quieres que el programa devuelva un mensaje. Como que no entendimos tu consulta. Eso es. Eso es todo lo que puedes hacer o tu entrada, tal vez sea mejor. Este es un programa. Nuevamente, tenemos un escenario donde el usuario entra lluvia exactamente, y esto se ejecutará en ese caso, y el escenario cuando el usuario ingresa una palabra, que no tiene ninguna coincidencia. ASD CAC C, algo así. En ese caso, esto no se ejecutará. Conseguí esa sentada. Déjame probar el programa ahora. Ingresa palabra. Lluvia. Obtenemos las definiciones de lluvia. Nuevamente, ingrese palabra. Lluvia, así. ¿Quiso decir lluvia en su lugar? Ingresa en caso afirmativo, ingresa, no, si no. Déjame probar sí, y obtenemos la definición correctamente. Y entra N para el no. La palabra no existe, por favor revisarla. Eso también estuvo bien. Esto lo conseguimos ejecutado. El otro escenario sería así. En lugar de ingresar Y y N, solo tienes que escribir algo y dices que no entendimos tu entrada. Bueno. El otro escenario es cuando ingresas una palabra que no tiene ninguna coincidencia en absoluto, y en ese caso, esta se ejecutará de inmediato. Y eso es todo. Por cierto, aunque ingreses números, digamos uno, la palabra no existe porque no está incluida en el diccionario. Creo que nuestro programa es bastante inteligente ahora. Está considerando muchos escenarios ahí y es bastante fácil de usar, diría yo. Sin embargo, hay una última cosa que podemos mejorar y es la forma en que el programa muestra las definiciones. Cuando pasas digamos que tres también tiene dos definiciones. Pasemos una palabra que tenga una definición. Estructura, tal vez. Oh, esto tiene tres definiciones. Todo bien. Pirámide. Esto también tiene dos definiciones. De todas formas, entiendes la idea. Estaba tratando de encontrar una palabra que tuviera una definición. Pero básicamente, lo que obtienes con una palabra así que tiene una definición es que todavía obtienes una lista, que termina aquí, así que no tiene coma y no tiene ningún otro ítem Es una lista con un ítem. Cuando tienes una palabra que tiene más de un significado, obtienes esta lista con más de un ítem. Y así no quieres mostrar la lista de usuarios con corchetes así. Lo mejor que puedes hacer para mostrar al usuario es, si tienes un significado, una definición para la palabra, solo muestras esta definición, sin comillas, sin corchetes, solo una definición. Si tienes más de una definición, solo muestras mostrar una definición por línea. Entonces básicamente, tienes múltiples líneas con definiciones. Sí, necesitamos implementar eso también para decir finalmente que nuestro programa es bueno y puede ser utilizado por cualquiera, y el resultado es fácil de leer. Piénsalo en eso. Lo vamos a implementar en la próxima conferencia, SU. 110. Optimización del resultado final +: Genial. Ahora tenemos un programa de trabajo y editamos todas las funciones que queríamos. El único problema ahora con el programa es que la salida no es muy fácil de usar. Con eso, quiero decir, digamos que sí aquí. Esta es la salida y obtienes una lista aquí. Es una lista de Python. Lo que queremos hacer en cambio es que queremos mostrar cada una de estas líneas en una línea separada en la terminal. Para que esa salida sea más legible para el ojo humano. Sigamos adelante y hagamos eso. ¿Cómo podemos implementar tal cosa? Esta salida ahora es un objeto list, lo que significa que la llamada aquí, la llamada a la función, produce este objeto list. Lo que podemos hacer es que tal vez podríamos iterar a través de este objeto list, algo así como podemos almacenar el objeto list en una variable, salida se le asignará esta lista Entonces lo que puedes hacer es guardar cuatro ítems en la lista de salida, imprimir el ítem. Guardemos esto y probemos. Aquí vamos a tener un problema, pero paso a paso. Entra Y, Y, y esto es lo que quería tener. La primera definición, precipitación en forma de agua líquida va en la primera línea y la segunda definición para caer de las nubes y gotas de agua va a la segunda línea. Eso es bueno. Sin embargo, debemos tener en cuenta que nuestro programa no produce solo lista, sino que a veces también produce cadenas, como esta de aquí. No, no quise decir eso. En fin, así que esto es lo que obtienes y no quieres eso. Este es un mensaje que dice que la palabra no existe. Entonces, lo que está haciendo el programa, lo que Python está haciendo es iterar a través todos los tipos de salida que genera la función Una función genera una lista, a veces y a veces genera una cadena. ¿Cómo podemos arreglarlo? Tenemos una lista y una cadena. Pensemos en la diferencia. ¿Cómo podemos discriminar una lista de una cadena? ¿Cuál es la diferencia entre una zona lis y una cuerda? Bueno, la diferencia es claramente un tipo de datos. Una lista es un objeto de lista y una cadena es un objeto de cadena. ¿Qué tal implementar un condicional aquí? Decimos algo así si tipo de salida. Es una lista, luego sangrar esto con cuatro espacios y ese también Este look ahora está anidado dentro del condicional y se ejecutará solo cuando este se evalúe a true, solo cuando nos devuelvan una lista del programa lo contrario, si no es una lista, tiene que ser una cadena. En ese caso, queremos imprimir la salida sin iterar a través de ella. Déjame revisar. Y obtenemos la salida correctamente esta vez el mensaje la palabra no existe, por favor verifícalo dos veces. Comprobemos otra vez con una palabra correcta y ahí conseguiremos las definiciones correctas. Intentemos otra palabra. Matemáticas. Esta vez, la palabra matemática sólo tiene una definición, así que aquí sacamos la definición pret Es una ciencia. Probemos también el otro escenario, trapo. ¿Quiso decir rango? No. La palabra no existe, por favor revisarla. Tenemos esta línea aquí ejecutada. Entonces este es el código completo. Creo que ya podemos considerar nuestro programa completo. Eso es lo que pensé en agregar al programa. Ahora el programa es bastante fácil de usar y estamos considerando muchos escenarios ahí que el usuario pueda ingresar al programa. Sin embargo, la interfaz sigue siendo una interfaz de línea de comandos, por lo que no es un programa gráfico de escritorio y no es una aplicación web. La interfaz es la línea de comandos, envía entrada a través la línea de comandos y se obtiene salida a través de la línea de comandos. Lo que estoy tratando de decir es que en realidad se puede extender este programa para que pueda transformarlo en una aplicación web donde el usuario en lugar de ingresar la entrada a través de la línea de comandos, pueda ingresar entrada a través de una página web. A través de un sitio web en vivo, pueden ingresar, presionar un botón y luego obtener la salida dinámicamente en la página web HTML. Eso es posible con Python, pero aún no estás listo para hacerlo porque tenemos bastantes secciones más por recorrer. Tenemos algunas aplicaciones donde te enseñaré a desarrollar aplicaciones web con Python. Y después de eso, puedes volver a este código y extenderlo y crear una interfaz web. Además, podrás crear una interfaz gráfica de usuario de escritorio con el conocimiento que obtendrás a través de estas secciones porque también estamos cubriendo las interfaces gráficas de usuario en el curso. Y también estamos cubriendo bases de datos. ¿Por qué menciono bases de datos? Bueno, porque en este programa, estamos usando este archivo donde almacenar nuestro conjunto de datos. El problema con esto es que si esto se hace demasiado grande por ahora, esto es solo 5 megabytes, eso es bueno Pero si el archivo se vuelve demasiado grande, entonces necesitas cargar el archivo en Python cada vez que ejecutes el script. Como aquí, estamos cargando el archivo en la sesión de Python cuando ejecutas el script. Ahora bien, si el archivo es demasiado grande, eso va a ser muy costoso en términos de tiempo. Lo que quieres hacer en cambio, quieres usar una base de datos. A lo mejor. Con la base de datos, lo sucede es que haces una consulta a la base de datos y en lugar de obtener todo el conjunto de datos, en realidad solo obtienes esa fila o ese valor por el que consultas. Las bases de datos son muy eficientes y cubrirán las bases de datos más adelante en el curso. Después de algunas secciones, volveré a este programa. Te lo daré como ejercicio para que puedas extenderlo creando una interfaz, una interfaz gráfica para eso o una interfaz web, y te voy a dar acceso a una base de datos donde puedes consultar datos para este programa para que se convierta un verdadero robusto con una interfaz de usuario muy amigable. Espero que te guste la idea y espero que estés disfrutando del curso, sigamos con algunas secciones más. Te veré más tarde por 111. Cómo corregir errores de sintaxis en Python: Hola, bienvenidos a esta nueva conferencia. Esta es la conferencia más importante que has tenido hasta el momento en este curso. Por favor, intenta sacarle el máximo partido. Este es en realidad un nuevo video que estoy agregando al curso. No tuve esta conferencia hace algunas veces, así que agregué esto bastante después de publicar el curso. Y hasta ahora, había explicado este concepto, por lo que los errores poco a poco en otras conferencias. Pero sentí que eso no era suficiente y estaba viendo que los estudiantes seguían teniendo dificultades para entender y lidiar con los errores en Python. Decidí hacer una conferencia dedicada a los errores en Python. Aquí estamos. Dije, esta es la conferencia más importante porque aprendemos sobre funciones y cuerdas y números hasta ahora en los videos anteriores. Y estos son conceptos individuales que aprendes una hora o después aprendes funciones y cuerdas, etcétera Pero si no sabes leer un error, cómo entender un error y tratarlo, si no lo sabes, tendrás problemas para lidiar con todo, cualquier otro objeto como funciones y cadenas y números, etcétera Entonces entender un error y saber cómo lidiar con él, cómo solucionarlo es muy importante. E incluso los programadores más experimentados, cometen errores en sus programas La diferencia es que saben leer estos errores, cómo entenderlos y corregirlos. Pero todos cometemos errores. Si aparece algún error en tu programa, no entres en pánico, solo tienes que seguir las instrucciones que te daré en este video sobre cómo solucionar el error. De eso se trata esta conferencia. Entonces, ¿qué es un error de todos modos? Un error en un programa es un error que hace que el programa funcione incorrectamente. Ahora, en Python, tenemos básicamente dos tipos de errores. Tenemos errores de sintaxis y tenemos excepciones. Primero centrémonos en los errores de sintaxis y olvidemos las excepciones. Iremos a las excepciones después de explicar los errores de sintaxis. Tengo este código aquí y en realidad, este es un archivo Python. Este es el icono que se muestra en una Mac. Actualmente, estoy en una computadora Mac, pero eso no hace la menor diferencia, no importa donde estés, Linux, Windows o Mac, todo es igual. Tengo la terminal aquí y déjame seguir adelante y ejecutar este programa. Esto tiene algunos errores. Déjenme mostrarles. En Mac, puedes llamar a Python tres con el comando Python three. En Windows, puedes simplemente llamar a Python o a cualquier comando que estés usando. También puedes usar cualquier editor que te guste Errores punto pi es un nombre que le di al script ejecutar. Entonces este es ahora ejemplo de un error de sintaxis. Este es el cuerpo completo del mensaje de error, y esto es muy importante. Siempre que te sale un error, el primer consejo que te doy es que no te asustes. Sólo concéntrate en el error, léelo línea por línea, igual que estás leyendo un poema o lo que sea. Entonces la primera línea del error te señala el nombre de un archivo que tiene el error. En este caso se encuentran los errores punto pi. Entonces tienes una coma y después de la coma, tienes la línea donde ocurrió el error Es la línea tres y puedes ver aquí que la línea tres es esta de aquí. Pero también tienes para tu comodidad, Python imprime la línea en la terminal. En nueve, aquí es donde está el error y después de eso, se tiene el tipo del error. Es un error de sintaxis. También tienes otro tipo de errores como error de nombre, error de tipo, pero esas son excepciones, y luego explicaré por qué las llamamos excepciones. Este es un tipo de error de sintaxis y los otros son excepciones. Este es un tipo y luego tienes una descripción después de la columna. En ocasiones la descripción es más específica, más detallada. Esta vez es simplemente sintaxis inválida. Tienes que averiguar dónde hiciste algún error o dónde te perdiste alguna sintaxis de tu programa. También tienes esta flecha aquí apuntando hacia arriba, y la flecha te señala ya sea al token de que se está produciendo el error o al final del token. Token es este es un token en este caso, nueve. Puede ser un número, puede ser una cadena, cualquier cosa. En este punto, esto está apuntando a la ficha. Pero también podría ser así 999, guarda el guión como un lindo en este caso, ves que te está apuntando al final de una ficha. Aquí por aquí tienes una flecha ahora y sé que en realidad es una función y funciones en Python Una necesidad de tener corchetes, así que necesitas pasar 999 entre corchetes así, y dejas eso. Guardar y ejecutar de nuevo. Todo bien. Tienes otro error, pero no vuelvas a entrar en pánico. Este es mi consejo siempre. En cambio, leí el error, dice errores de archivo Línea cinco, línea cinco esta vez. Ya no es la línea tres, lo que significa que esa línea tres estaba arreglada. Lo que Python está haciendo es que está pasando por todas las líneas una por una de arriba a abajo. Comprueba la primera línea, dice, está bien. No hay error ahí, va a la siguiente línea, no hay error, va a la tercera línea, no hay error esta vez. La cuarta línea también está bien. La quinta línea tiene un error. Nuevamente, se trata de un error de sintaxis, y éste se describe más específicamente. Faltan paréntesis en llamada a imprimir. Ten en cuenta que obtienes este error solo si estás en Python tres, si estás en Python dos, esto no será una flecha porque Python dos, print era una declaración y no era una función. Con declaraciones como return o print en Python dos, no tienes que pasar corchetes. La sintaxis sería correcta. Nuevamente, esta flecha aquí te está apuntando al token, solo agregamos corchetes ahí. Control S para guardar el script y ejecutar de nuevo. Esta vez no obtenemos ningún error, el script ejecutó bien e imprimió la salida aquí, uno, dos, tres. Teníamos tres funciones de impresión, impresión de salida. Esto no devuelve ninguna salida porque no estamos imprimiendo nada. Esto solo obtiene la entrada de la función y produce alguna salida, pero eso no imprime nada. Si quieres imprimirlo, quieres pasar allí la función de declaración de impresión. También podría haber otros tipos de errores de sintaxis, como por ejemplo, desea definir estos uno, dos y tres. Pero en lugar de cerrarlo con un corchete, usa un corchete redondo así, guarda el script y ejecuta. Ves que tienes un error de sintaxis sintaxis no válida en la línea cinco, que es esta de aquí. Nuevamente, la flecha te apunta a la ficha, así que necesitas averiguar cómo arreglar este soporte redondo aquí, y lo sabes. necesario cerrarlo con un corchete, eso debería solucionar el problema. Eso se trata de errores de sintaxis. Son muy fáciles de arreglar. En la próxima conferencia, voy a explicar excepciones. Te veré ahí. 112. Cómo corregir errores de ejecución en Python: Hola, nuevamente, bienvenidos a esta nueva conferencia. En la conferencia anterior, hablamos de errores en general y me enfoqué en errores de sintaxis, que es uno de los dos tipos de errores que tienes en Python. Tienes errores de sintaxis y tienes excepciones. Ahora vamos a hablar de excepciones en Python. Cualquier otro tipo de error que no sea un error de sintaxis es una excepción. A menudo todos los errores, errores de sintaxis y excepciones, se denominan errores. Entonces vas a escuchar esto por todas partes. Ahora tengo aquí un nuevo guión que creé para esta conferencia. Intenta adivinar lo que voy a obtener como salida ejecuto este script. Tengo A igual a uno, B es igual al carácter dos, imprima en 2.5 e imprima A más B. Adivina lo que voy a conseguir por un momento. Ahora déjame ejecutar el script, Python tres, errores punto Pie. Errores de archivo que pi, línea cuatro, que es la última línea. Este, obtenemos un error de sintaxis sintaxis no válida. Ahora bien, esto puede ser muy confuso para ti ahora porque estás viendo la expresión impresa A más B, pero ahí no ves ninguna flecha. Para un principiante, esto puede ser bastante frustrante, pero trata de mirar hacia atrás a la izquierda de la flecha aquí Piense en la flecha que la flecha está apuntando al token y el token no se ha escrito correctamente en el guión. En este caso, el problema aquí es que esta línea aquí, tiene un corchete abierto, corchete redondo, y luego tiene función int, entonces la función int tiene su propio corchete que está envolviendo dentro de su entrada. Estos son los corchetes de la función in, pero la función de impresión no tiene un corchete de cierre. Lo que hiciste en cambio, lo que yo hice en realidad. Lo que hice es que en vez de poner un soporte ahí, en realidad escribí otra función de impresión. Python esperaba un cierre alrededor del corchete, pero escribí una función de impresión Por eso esto está diciendo que esta función de impresión no está en la posición correcta. Esa es la idea. Siempre, cuando veas esta flecha, primero mira esta línea, pero luego mira antes de eso. Perdón por esto. Siempre, cuando veas esta flecha aquí, primero mira esta línea aquí, pero tampoco olvides que el problema también podría estar antes de esta línea. Eso fue sobre el error de sintaxis. Voy a explicar por qué hablé de este error de sintaxis aquí. Permítanme exexecerlo otra vez. El error de sintaxis se solucionó ahora, pero aún tenemos otro error. Entonces, la razón por la que incluí un error de sintaxis en mi código fue para mostrarte que Python realmente primero verifica errores de sintaxis. Básicamente, analiza el código. Se busca errores de sintaxis. Aún no ejecuta el código. Cuando ejecuté Python tres errores punto pi aquí, el código no se ejecutó, sino que el intérprete solo comprueba si hay errores de sintaxis. Todavía no comprueba las excepciones. Primero hay que corregir los errores de sintaxis, y eso es lo que hicimos aquí. Agregamos este corchete y arreglamos los errores de sintaxis. Ahora Python está lanzando una excepción. Y vamos aquí es donde ejecuté el código y veamos la siguiente línea, tenemos ahí el número dos, que viene de la salida de esta línea aquí. De la línea tres, obtuvimos la salida correctamente. Básicamente, nuevamente Python ejecuta un script de arriba a abajo. Si no encuentra errores de sintaxis, si encuentra errores de sintaxis, no ejecuta nada. To se imprime, y luego obtienes este rastro del error. Que empieza ahí y termina aquí. Eso es un bloque del error. En ocasiones los errores pueden tener más de un tipo de error. En este caso, solo tenemos un tipo de error, que es un error de tipo, pero posible que tengas varios bloques aquí. No obstante, el error más importante en el que debes enfocarte es la última línea del error, el último bloque del error. En este caso, solo tenemos un bloque, estamos enfocados en eso. Línea cuatro que es esta de aquí. Esta es una línea. Nuevamente, la línea está imprimiendo al igual que en el caso del error de sintaxis. Aquí tienes un tipo del error aquí, que es un error de tipo. ¿Qué es un error de tipo? Un error de tipo significa que hay algo mal con uno de tus tipos de objeto en tu script. Tienes la descripción aquí. Soporté operando tipo cuatro plus. Entonces esto es tratar de decir que el operador plus tiene un tipo no soportado, el operador plus, en otras palabras, no soporta uno de los tipos que le has dado, ya sea el tipo de variable A o el tipo de variable B. Dice Int y string No dice específicamente que si Int o string es objeto, pero dice que no se puede usar un operador plus con un entero y una cadena que es lógicamente incorrecta porque no se puede agregar un número a algún texto Eso es lo que Python no entiende y arroja un error de tipo. Las excepciones son errores lógicos y necesitas usar tu lógica ahora para corregir el error y usar nuestra lógica inspeccionando cuidadosamente el error, y eso es lo que hicimos Lo que queremos hacer queremos arreglar esto. Ahora depende de mí si pretendía concatenar estos dos objetos o hacer una operación matemática de suma Digamos que si tenía la intención de hacer una suma entre estos dos números, entonces tendría que convertir B a float o a un entero Di eso. Ejecutar. A, este caso no obtienes ningún error, obtienes dos impresos de la tercera línea y 3.0 de la última línea que acabamos de arreglar. Sin embargo, si mi intención era imprimir realmente la concatenación entre estas dos cadenas, en lugar de convertir B en un flujo, tendría que convertir A en una En este caso, voy a recibir el texto uno y dos, uno y dos. Eso sería un objeto string, no un número. A pesar de que aquí se muestra como un número, es justo como el terminal lo imprime. Nuevamente, estos son errores que ocurren en tiempo de ejecución, por lo que el script se ejecuta. Los errores de sintaxis son errores de análisis, por lo que el intérprete intenta entender si el script es sintácticamente correcto, si está lleno, si ha seguido las reglas de sintaxis de Python Necesita soporte, soporte de cierre para abrir el soporte. Necesita una cotización de cierre después de la cotización de apertura y así sucesivamente. Ahora también hay otro tipo de excepciones. No solo escribe error, es posible que tengas un error de nombre. Digamos aquí en vez de imprimir que imprimimos C, guardamos, ejecutamos. Aquí hay un rastreo. Nuevamente, se imprimieron dos de la tercera línea. El rastreo dice la línea cuatro en la impresión C. Error de nombre nombre C no está definido Nuevamente, esto no es un error de sintaxis porque no has cometido ningún error con una sintaxis. Tienes este nombre de variable que es correcto. Tiene soportes que abren los soportes redondos y se cierran alrededor del soporte. Todo es sintácticamente correcto, pero este objeto C, Python no lo sabe No has definido esta variable C, Python no sabe qué imprimir. Python es capaz de imprimir A porque sabe que A se refiere al entero uno y así imprime el entero uno, pero C no tiene nada. Obtienes este error de nombre. Y cada vez que obtienes tu error de nombre, sabes que este nombre aquí no ha sido definido por ti. Para solucionar esto, es posible que desee definir C así y ejecutar y no obtenga ningún error. También puede tener otro tipo de errores como C dividido por cero, vea lo que obtiene. Error de división cero, división por cero. Esa es la descripción de este error. La división por cero no es matemáticamente posible ni significativa Dado que Python se basa en las matemáticas, entonces arroja un error y necesitas arreglarlo, necesitas eliminar esa expresión que divide por cero De todos modos, eso es sobre errores en Python, espero que hayas entendido mucho de esta conferencia y de la conferencia anterior también Es relativamente fácil corregir errores, sin embargo, a veces hay errores que podrías tener dificultades para entenderlos y arreglarlos. Posteriormente, por ejemplo, vamos a trabajar en bibliotecas y a veces bibliotecas, tienen diferentes tipos de errores. No obstante, nada de qué preocuparse porque hay otras cosas que puedes hacer por un error que no entiendes. Hablaré de eso en la próxima conferencia. Te veré ahí, verás. 113. Cómo corregir errores difíciles: Genial. Bienvenidos de nuevo a este nuevo video. Este es el tercer video sobre errores. Hablamos de errores de sintaxis, hablamos de excepciones, y ahora vamos a hablar de cómo corregir un error cuando no entiendes el mensaje. Centrémonos en este error. Un error de división cero. En caso de que fueras bueno en matemáticas, podrías corregir fácilmente estos errores. Podrás entender que no puedes dividir no puedes dividir un número por cero. Arreglarías esto quitando esta expresión aquí. Sin embargo, si no fueras tan bueno en matemáticas, puede que esto te resulte difícil de entender. En ese caso, la forma más rápida de corregir este error es copiando esta línea aquí, Control C. Selecciónala, cópiala con Control C o haz clic derecho y copia ahí, y luego ve a Google. Sólo pégalo. Ahora, en Google, estos obtuvieron alrededor de 100 mil resultados. Python es muy popular y obtendrás una solución para casi todos los problemas que consigas con Python. Antes de mirar la documentación o hacer una pregunta en alguna parte, es muy probable que alguien más haya tenido tu problema antes de que hecho una pregunta sobre eso y también haya una solución al respecto. Un muy buen sitio web de preguntas y respuestas es stock overflow.com Casi siempre cuando buscas un error en Google, los primeros resultados serán del desbordamiento de chupar. Alguien ha hecho una pregunta con este título. Me enfrento a un error cuando ejecuto el programa usando Python. Es exactamente el mismo error que a ti te gusta eso. Cómo evitar ese error. También habla de la salida deseada. Hay dos respuestas para esta pregunta. La respuesta con esta marca verde aquí es respuesta aceptada y tiene la mayor cantidad de votos al alza. 11 y esto tiene dos votos a la baja, menos dos. En realidad, la diferencia entre los votos ascendentes y los votos baja es a favor de los votos a la baja. Estas son dos respuestas diferentes que puedes mirar. Por lo general, se quiere ver la respuesta aceptada que tiene la solución. No obstante, en este caso, esto también tiene la explicación. Dice que no se puede dividir por cero. Esto hace que Python genere un error. Esa sigue siendo una buena respuesta, y creo que no merecía tener este saldo de votos. Pero éste da una solución sobre cómo manejar un error que nos lleva a otro concepto que es manejar errores en Python. Digamos que tienes un programa, tienes una función que obtiene dos valores de entrada y luego divide esos dos valores de entrada Sin embargo, a veces el usuario puede pasar cero como segunda entrada. En ese caso, si divides, digamos, el primer valor sería dos y el segundo valor sería cero, tu programa se caería y si quieres, puedes usar el manejo de excepciones para evitar realmente que ese programa se estrelle Eso se puede hacer con declaraciones try and accept. En fin, lo cubriremos en las próximas conferencias de esta sección. Se trataba de buscar un error en Google y puedes encontrar fácilmente la solución a eso. Como veis. Estas son preguntas muy claras. Es una comunidad grande y todos pueden votar arriba y abajo y pueden comentar. Básicamente, las respuestas son muy precisas. Sin embargo, no siempre encuentras una respuesta en Google. En ese caso, es momento de hacer tu propia pregunta. Lo primero es, de nuevo, que compruebes si entiendes el error y lo arreglas si lo entiendes. Lo segundo es que haces una búsqueda en Google y si los dos primeros no logran resolver tu problema, entonces es momento de hacer una pregunta. Puedes hacer una pregunta ya sea dentro del curso. Mientras ves un video, puedes navegar por Q&A, que significa pregunta y respuesta, y puedes hacer una búsqueda rápida si encuentras una respuesta existente a tu pregunta aquí, y si no la encuentras, entonces puedes hacer una pregunta o puedes hacer una pregunta sobre Desbordamiento de stock Puedes usar este botón aquí, hacer una pregunta y estaré encantado de ayudarte aquí en la interfaz del curso, en la sección de preguntas y respuestas, u otras personas también te pueden ayudar en el desbordamiento de stock No obstante, es muy importante saber algo. La estructura de tu pregunta es muy importante para obtener una buena respuesta. A veces hay preguntas muy malas como, digamos, mi código no funciona, ¿cómo soluciono esto? Eso es todo. Con esa muy poca información, es muy difícil obtener una buena respuesta. Es muy importante hacer una buena pregunta y te voy a mostrar cómo hacer una buena pregunta de programación en la próxima conferencia. Esa también es una conferencia muy importante. Ver ahí. 114. Cómo hacer una buena pregunta de programación: Hola, otra vez y bienvenidos a otra conferencia más. En esta conferencia, te voy a mostrar cómo hacer una buena pregunta de programación. Como mencioné en la conferencia anterior, hacer una buena pregunta de programación es muy importante para obtener una buena respuesta. Déjame primero mostrarte qué es una pregunta de programación de camas. Por ejemplo, voy a dar click en Hacer pregunta y aquí está el título de la pregunta. Una pregunta de programación Bt tendría un título muy genérico como ese. Aquí está el cuerpo de la pregunta donde tienes que describir tu pregunta en detalle. Algunas personas, solo dicen, me dio un error al intentar dos números. Yo sólo hago una pausa en la pregunta. Una mejor pregunta sería incluir ahí el código que ejecutaste así. No obstante, eso tampoco es suficiente porque también es necesario mostrar el mensaje de error. Déjame borrar esto y una buena pregunta de programación sería cuando estás hablando de preguntas que tienen un error, preguntas que hablan un error que tienes en tu código. Este es tu código. Un buen título sería incluir el mensaje de error. Ese sería un buen ajuste. Si es un mensaje muy largo, entonces puedes optar incluir solo el nombre del error con todo eso. Y entonces una buena pregunta sería, hola. Ejecuté el siguiente código y esperaba obtener división en la última impresión principal pero obtuve un error. Aquí está mi código. Entonces pones ahí el código, todo el guión. No te preocupes si tu pregunta es larga, es mejor ser larga que estar incompleta. Aquí está el error. Aquí, asegúrese de incluir su seguimiento completo de errores, incluida la salida también Desde esta línea de la línea de comandos hasta la siguiente línea. Todo esto va a tu pregunta. Sólo cópielo. No te preocupes si es largo. ¿Puedes ayudar? Esa sería una buena pregunta de programación. Ahora bien, a esto le falta algo muy importante, y ese es el resaltado del código. Es necesario seleccionar el código y hacer clic en este icono aquí. El error también. Déjame plantearme la pregunta. Los enlaces externos deben proporcionar contenido educativo gratuito, simplemente haga clic en continuar. Aquí hay una pregunta aquí es que se ve como en el otro extremo. Esta pregunta tiene cuatro buenos elementos que la convierten en una buena pregunta. El primer elemento es que el cartel está mencionando lo que él o ella esperaba obtener como salida del guión que estaban ejecutando. Entonces dice que esperaba obtener la división en la última declaración impresa, que es esta de aquí, pero me dio un error. Lo primero es que hay que incluir la salida esperada. Necesitas explicar lo que esperabas porque de lo contrario, si no explicas lo que esperas la otra persona que te quiere ayudar no conoce el objetivo de tu código o de tu pregunta, por lo que no sabe cómo ayudarte a alcanzar esa meta. Esperar salida es lo primero. Lo segundo es que necesitas incluir todo tu código. Y asegúrate de incluir tu código como texto. Es mejor usar texto como pantallas en lugar de capturas de pantalla porque text, la persona que quiera ayudarte puede copiar tu código y ejecutarlo en su intérprete Python. Pero si incluyes capturas de pantalla, son imágenes y es difícil para otras personas probar tu código. Si haces esto en desbordamiento de pila, tu pregunta se cerraría porque si la haces usando una captura de pantalla en lugar de la versión de texto de tu código, la pregunta se acercaría porque hay reglas muy fuertes en desbordamiento de pila para tener un lado de preguntas y respuestas de alta calidad. Ese es el segundo elemento. El tercer elemento es que necesitas incluir toda tu pantalla completa el seguimiento de errores, lo siento Desde el principio hasta el final, ese fue el tercer elemento y el último elemento, el cuarto elemento es que necesitas resaltar tu código. Así como así, ves que esto es mucho más visible y más fácil de solucionar para otros La interfaz del curso tiene esa función ahí que puedes resaltar tu código. En el desbordamiento de stock, también tienes esa capacidad, solo tienes que ir a hacer una pregunta, escribir tu carrera y resaltarla y luego usar este corchete. Sí, eso es. Si haces buenas preguntas, probable es que también obtengas una buena respuesta. Espero que esto tenga sentido y espero haberte enseñado algo que no sabías y te hablaré más tarde. Nos vemos. 115. Cómo hacer que el código maneje los errores por sí mismo: Hola, otra vez. Tengamos una conferencia más sobre errores en Python. Esta conferencia en particular será sobre el manejo de errores. Manejar errores puede ser un concepto avanzado para digerir por ahora porque todavía estás pasando por los conceptos básicos de Python y aún no has visto ninguna aplicación real. Pero más adelante usaremos el manejo de errores cuando estemos construyendo aplicaciones del mundo real. Entonces vas a entender mejor el manejo de errores más adelante. Por ahora, centrémonos en la sintaxis y tratemos de entender todo lo que puedas. Voy a ir a hacer un ejemplo aquí, que mencioné antes, digamos que tenemos una función que hace división entre dos números dados así. Retorno A dividido por B. Entonces llamas a la función. Divide uno, dos. En este caso, la función intentará dividir uno por dos. Déjame imprimir la salida para que podamos verla en la terminal. Ve a la terminal y ejecuta el script, obtienes 0.5. Ahora, eso es bueno. No obstante, si el usuario entra, digamos, cero ahí así, ejecuta y tu programa se bloqueará, por lo que mostrará un error. Ahora bien, este de aquí es un ejemplo de un mensaje de error más largo que mencioné anteriormente en los videos anteriores que podrías tener más de un error en tu rastreo posterior. Por ejemplo, esto dice archivo línea cuatro esta línea aquí. Esa línea es donde Python capturó el error al principio. Básicamente, Python estaba tratando de ejecutar esta línea, pero no pudo hacerlo. No logró hacerlo porque esta línea estaba tratando de obtener la información de esta función y esta función estaba tratando de hacer esta operación matemática usando cero después de la división. Entonces eso no es posible y Python lo está señalando aquí afuera. Ese es el principal error en línea en esta expresión. Ahí es donde debes enfocarte. No obstante, cuando hagas preguntas, debes incluir todo el mensaje de error en tu pregunta como mencioné anteriormente. De vuelta al manejo de errores ahora, lo que estoy tratando de decir aquí es que si tienes otras funciones aquí y otras líneas de código que quieres ejecutar eso quieres que Python ejecute. Pero si el usuario pasara aquí este número cero, las otras líneas no serían ejecutadas. Tu programa se estrellaría y no quieres eso. La forma de evitarlo es usando try and accept. Básicamente, intentas capturar la excepción. Para manejar la excepción. La manera de hacerlo es bastante fácil. Intenta, dices prueba y devuelve A B. Esto tiene que ser sangrado así Try está sangría porque está bajo la definición de función, y luego return es sangría porque está bajo la expresión tri Entonces tienes excepto ejecutar. Esto tiene que estar en el mismo nivel de sangría con tr. Ellos son el mismo bloque. Excepto si hay una excepción, lo que quieres hacer es prio estás dividiendo por cero o no tiene sentido Déjame probar esto ahora. Y obtienes cero división no tiene sentido. Lo siento, me refería a hacer aquí regresar, no imprimir. Te explico por qué no obtienes ninguno ahí. No obtuviste ninguno como salida porque lo que hizo la función fue que intentó hacer esta expresión, pero obtuvo error, por lo que ignora esta línea, no la ejecuta, y luego pasa a la siguiente línea Esta línea se ejecuta cuando ésta no se ejecuta. Y así imprimió la división cero no tiene sentido, pero tampoco imprimió ninguna porque cuando ejecutas una función que no tiene una sentencia return, como en este caso, teníamos una declaración print aquí, función print, no una sentencia return En ese caso, si la función no está devolviendo nada, puede tener una función de impresión u otra función también. Pero si no tiene una declaración de retorno, entonces no imprimirá ninguna. Básicamente, ejecuta los demás procedimientos como la declaración impresa, imprime la declaración Pero si no tiene una declaración de retorno, no imprime ninguna. En fin, diga esto ejecutar de nuevo y en este caso, obtiene sólo esta división cero es sin sentido impreso por ahí Básicamente, si tuvieras otras líneas de código aquí, así, esas también se ejecutarían. Eso sucede al usar el bloque try and accept, lo que asegura que el flujo de código continúe. Otra cosa importante a tener en cuenta es que es recomendable usar realmente aquí el nombre exacto del error que quieres aceptar. Entonces error de división cero. Como ves esto se convirtió en azul, lo que significa que esta es en realidad una palabra clave Python es reconocida por Python. En ese caso, si ejecutas esto, obtienes la misma salida realmente así. O si pasas ahí un número que es posible obtener una división, lo obtendrás. Disculpe lo de la diagonal. Escribí eso por error en mi ejecución interna otra vez, así que entiendes esto Lo que estoy tratando de decir sobre el error de división cero es que a veces podrías obtener otro tipo de errores en tu código. Excepciones de otros tipos. Digamos que ahí tienes un error de nombre y estás diciendo que excepto todos los errores cuando no pasas esto, básicamente estás incluyendo todo tipo de errores ahí. Eso es un poco peligroso para tu código porque podrías tener problemas que no notas y básicamente los estás ignorando, pero no deberías Deberías ser específico ahí explícito así. Si hay otro tipo de errores como un error de nombre, ese error de nombre bloqueará tu programa ya sabes lo que está pasando y necesitas ser específico. Si quieres manejar ese error también, entonces puedes agregar otra excepción aquí excepto el error de nombre, por ejemplo. Sí, eso se trata de manejar errores en Python. Espero que esto tenga sentido. Espero explicar esto bien esto sobre errores. Te hablaré en las próximas conferencias. 116. Introducción a la visión por computadora con Python +: Hola, bienvenidos a esta nueva sección. Y a lo largo de las conferencias de esta sección, vas a aprender visión por computador con Python. Te explicaré la visión por computador en un minuto. Entonces eso es lo que vamos a aprender en esta sección. Y luego en la siguiente sección, construiremos una aplicación que detecte objetos en movimiento desde la cámara web de la computadora y almacene y visualice los tiempos en que los objetos ingresaron y salieron del fotograma de video Entonces esa es un área de aplicación de la visión por computador. Ahora, tal vez tengas una idea de lo que es la visión por computador, pero si no, te lo explicaré ahora. Por lo que la visión por computador es el campo que ocupa de adquirir y procesar imágenes, y toma decisiones en base a ellas o a las imágenes. Entonces le pasas una imagen a la computadora, y la computadora trata de entenderla y puede hacer ciertas cosas como puede decirte cuántas fases hay en la imagen y qué color domina la imagen, y así sucesivamente Lo sé, las computadoras son volcadoras. Quiero decir, hay que decirles qué hacer exactamente. Y ahí es donde entra Python. Usaremos Python para cargar imágenes y procesarlas y hacer cosas como detección de rostro y movimiento. Ahora, la visión incluye tanto imágenes como videos porque los videos son simplemente pilas de imágenes que se muestran muy rápido. Entonces las computadoras y por lo tanto, Python usan los mismos comandos para leer imágenes y videos. Y puedes hacer visión por computador con Python usando OpenCV. OpenCV significa visión por computador de código abierto. Y la biblioteca Ise usa no sólo en Python sino en otros lenguajes de programación también en otros lenguajes de programación para hacer tareas de visión por computador. Entonces en esta sección, te voy a presentar OpenCV y aprenderás a usarlo detectando rostros a partir de imágenes Luego, en la siguiente sección, profundizaremos y procesaremos videos con OpenCV y detectaremos algunos objetos en movimiento en video de webcam en tiempo real Entonces, sí, eso es sobre esta conferencia, y sigamos adelante y configuremos rápidamente OpenCV en la próxima conferencia, luego trabajemos con ella después de eso Entonces sí, gracias y nos vemos en la próxima conferencia. 117. Cargar, visualizar, cambiar el tamaño y crear imágenes + + con OpenCV: Genial. Así que sigamos adelante y juguemos un poco con OpenCV Específicamente, lo que aprendes en esta conferencia es aprender a cargar imágenes en Python usando OpenCV, y aprendes a mostrarlas, cambiar el tamaño y luego guardar las imágenes de cambio de tamaño en nuevos Así que cargue, muestre, cambie el tamaño y escriba imágenes. Y tengo una bonita imagen de galaxia así que voy a jugar con esto. Lo primero que quieres hacer es importar la biblioteca. Lo segundo es que quieres cargar la imagen en Python. Entonces imagen sería igual a cv dos punto imagen método REIT. Entonces el método espera ahora la ruta a la imagen que se quiere cargar en Python. Y eso sería galaxy dot JPG. Entonces mi guión, un archivo punto Pi está en el mismo director con Galaxy dot JPG. Entonces solo necesito pasar el nombre del archivo aquí. Y luego hay otro parámetro más para la imagen para él en el método. Y entonces este parámetro toma tres argumentos. Ahora, este parámetro especifica cómo se quiere leer la imagen en Python. Entonces, ¿quieres leerlo como una imagen RBG, lo que significa que quieres tres bandas en tu imagen Entonces quieres una imagen a color con una banda roja, banda azul y verde. Entonces, si quieres leer la imagen como es con colores, te gustaría pasar una aquí. Si quieres leer la imagen como imagen en blanco y negro en una escala de grises, querrás pasar cero. Y tener una imagen en escala de grises implica que tu imagen tendrá una banda. Y volveré a las bandas y las explicaré en un momento. Entonces también tenemos menos uno. Esto significa una imagen en color, pero también tienes un canal Alfa, lo que significa que tu imagen tendrá capacidades de transparencia. Entonces, si aplicas operaciones que requieren transparencia, puedes hacer esa lectura cuando cargues la imagen con un argumento menos uno aquí. Bien, entonces me gustaría probar cero. Genial. Ahora, antes de mostrar la imagen, antes de mostrar la imagen en pantalla, me gustaría que entendieran de qué se trata este objeto de imagen. Así que me gustaría imprimir el tipo de la misma, así como así. Ejecute el script. Guión uno. Sí. Por supuesto, e inténtalo de nuevo. Entonces esta es la matriz dimensional NumPin. Y si quieres, puedes imprimirlo. Y verás la matriz num pi real. Entonces esta es una matriz bidimensional con valores en el eje horizontal y también en el eje vertical. Entonces piensa en la imagen ahora, y esta sería la primera, así que el valor de intensidad superior izquierda de un primer píxel. Entonces 14, por ejemplo, sería el valor de intensidad en la escala de grises. Para el primer píxel de la imagen, así para el píxel superior izquierdo de la imagen. Y luego el segundo píxel y así sucesivamente, y luego tienes estos puntos, lo que significa que Python no puede mostrar lista, la lista larga aquí porque tienes un par de miles de valores en la primera fila, y luego tienes la segunda fila de píxeles en la imagen y la tercera y así sucesivamente. Y esto hace que la matriz de los píxeles de la imagen. Y si quieres saber cuántos números, cuántos valores tienes en la dirección horizontal y cuántos valores tienes en las direcciones verticales, puedes seguir adelante e imprimir forma de imagen. Bien. Entonces digamos que la resolución de la imagen es de 14 85 por 990. Entonces Python almacena la imagen como una matriz de árbitro como una matriz de números tan fácil como eso Si quieres verificar la matriz de dimensiones de tu imagen, puedes hacerlo con esta expresión Y ves que tienes dos dimensiones. Ahora bien, si se trataba de una imagen a color, entonces con tres murciélagos rojo, azul y verde, las cosas cambiarán un poco. Entonces tienes tres dimensiones. Y también se ve que la nueva matriz es un poco diferente. Entonces aquí tienes valores para cada una de las bandas para verde, para rojo a verde y azul. Entonces me gustaría seguir con la imagen gris. Y lo que puedo hacer ahora es que puedo mostrar la imagen en la pantalla. Y para eso, quieres usar la imagen, así que yo soy el método show. Y esto mostrará una ventana y quieres darle un nombre a esa ventana, así que quieres poner un título para esa ventana. Digamos galaxia. Y lo que pasa aquí es el objeto de imagen. Entonces éste. Genial. Y entonces lo que quieres hacer es especificar una hora para que tu ventana se cierre porque esto mostrará la ventana, pero también quieres definir algunas funcionalidades para que el usuario pueda cerrar la ventana. Si pones cero aquí, cuando el usuario presiona cualquier botón, la ventana se cerrará. Déjame cambiar esto a Cb dos. Entonces, si pones cero, el usuario puede cerrar la ventana presionando cualquier botón. Si se quiere poner un tiempo, podría decir 2000 y eso implica 2000 milisegundos. Entonces eso significa 2 segundos. Entonces dijimos cómo el usuario quiere cerrar la ventana, y luego se quiere especificar qué hacer cuando el usuario presiona un botón o espera 2 segundos. Entonces quieres destruir todas las ventanas. Ese es un método que cierra la ventana. Bueno. Veamos qué va a pasar. Bien, entonces conseguimos que se mostrara la imagen, y esperó dos sagas, y luego se cerró Si lo pones en cero, la imagen se quedará ahí. Y si pulsas el botón, éste se cerrará. Déjame volver a mostrar la imagen. Ahora bien, la razón por la que no ves la imagen caber en mi pantalla es que la imagen, como ves aquí en estos valores es de 1485 píxeles de alto Entonces la altura, esta es la altura, y tiene 990 píxeles de ancho. Entonces mi resolución de pantalla se establece en 1,280 por 720. Entonces eso significa que esta imagen con este tamaño no cabe en mi pantalla porque mi pantalla es demasiado pequeña para esto. Entonces en este caso, déjame cerrar esto. Lo que puedes hacer es cambiar el tamaño de la imagen y luego mostrar la imagen de recise Entonces cargamos la imagen y antes de mostrarla antes de pasarla al método I'm show, quieres decir, digamos, redimensionar Imagen. Eso sería igual a. CV two sí cambia el tamaño, y esto obtendría dos parámetros El primero es, por supuesto, es objeto de imagen que se quiere cambiar de tamaño Entonces IMG es nuestra variable, y entonces se quiere especificar una tupla con las nuevas dimensiones, yo diría 1,000 por 500 Y luego quieres pasar la nueva imagen aquí. Entonces, lo que está sucediendo aquí es que Python en realidad está redimensionando la matriz num Pi. Entonces tomará la matriz con este número de píxeles número de valores, y creará una matriz con estas nuevas dimensiones. Entonces lo que va a pasar ahí es que Python interpolará esos valores Entonces aquí tiene bastantes valores, pero luego va de esto a esto. Entonces cuando ve, digamos, tiene cuatro por un valor y luego seis para el valor vecino. Y lo que Python hará es que obtendrá cuatro y seis, básicamente, y solo hará un valor de ello. Entonces digamos cinco. Esa es básicamente la idea. Entonces interpola los valores, y luego muestra la imagen interpolada en la pantalla Lo cual se ve bastante bien en nuestros ojos. Bien, veamos esto. Y esta es la imagen. Y ya ves que esto está bastante estirado un poco. Entonces era una imagen alta, pero ahora es bastante amplia. Y porque esto es en realidad el ancho de la imagen y esta es la altura. Entonces, si quieres, puedes decir 501,000. Entonces otra vez, y ahora ves más o menos la relación de dos de la imagen. Pero si quieres mantener la proporción de la imagen, te gustaría ir más avanzado aquí. Entonces digamos a partir de esto, digamos que nos gustaría mostrar un tamaño que sea la mitad de esto para que se mantenga la proporción de la imagen. Entonces lo que podemos hacer es que necesitamos acceder a estos valores. Y podemos agarrar esos valores del método shape. Entonces esto produce un tople con estos dos valores, y luego vamos aquí y decimos, imagen, forma Y este sería este valor, entonces 990, que tiene un índice de uno. Y luego tenemos, nuevamente, imagen y forma con índice de cero para este número. Y entonces queremos dividir esto por dos. Bien. Y espero obtener un error de esto, pero lo que es S. Así que sí, tenemos un error. Es un argumento entero de error de tipo esperado conseguido float. Pero aquí, lo que estamos haciendo aquí es que cuando dividamos este número por dos, obtendremos un flotador. Entonces obtendríamos algo así como 742.5. En ese caso, lo que queremos hacer es convertir esto en un entero. Entonces 742.5 se convierte en 742. Bien. Y mantengamos la consistencia así enteros para esto también. A ver. Aquí tenemos una sintaxis no válida, así que nos señala a la línea 11, en algún lugar del principio, lo que puede ser bastante engañoso. Entonces quieres ver antes de esa línea, que está aquí. Y se puede ver que este soporte aquí cierra aquí. Entonces necesitamos otro soporte, que se cierra en el primer corchete aquí. Así que guarda eso. Inténtalo de nuevo. Y esta vez, la imagen se ve bien. Entonces aprendes a cargar una imagen en Python, y aprendes a cambiar el tamaño de una imagen, a mostrar una imagen en la pantalla Y ahora sigamos adelante y escribamos la imagen de redimensionamiento en un nuevo archivo Para eso, querrás usar el método de escritura IM. Así que la imagen shte. Y quieres darle un nombre a la nueva imagen, Galaxy, digamos, redimensionó el punto JPG Y luego se pasa el objeto de imagen que desea almacenar en este archivo. Entonces la coma va sales aquí, y la imagen que quieres almacenar es imagen precisa. Eso es. Ejecutar. Y conseguimos cambiar el tamaño de la vieja imagen sobre la marcha. Entonces Python obtiene la matriz numpy. Lo entreplaca, así que le redimensiona, y luego lo muestra en la pantalla Entonces este es Galaxy, este de aquí, y luego podemos cerrar esto. Y aquí tenemos nuestra nueva imagen. Así que la galaxia cambia el tamaño. Entonces, si vas a la carpeta donde están estos archivos, verás que esta imagen tiene nuevas dimensiones. Entonces 495 por 742. Y eso es lo que quería enseñarte en esta conferencia. Espero que lo hayas disfrutado y platicar contigo más tarde. 118. Explicación del ejercicio anterior: Bueno, espero que resuelvas el ejercicio, y creo que no fue difícil. Mi propósito ahí era acostumbrarte con el código OpenCV. A ¿por qué no practicar un bucle for? Entonces, como puedes imaginar, este ejercicio se vendería usando un bucle for. Así que déjame pasar por el código línea por línea rápidamente. Así que tenemos dos OpenCV importantes, SL CV dos, y la biblioteca del globo Ahora bien, si puedes recordarlo, lo que hace Globe es que encuentre los nombres de ruta de algunos archivos dados un cierto patrón. Entonces en este caso, por ejemplo, tengo aquí estos archivos JPG, así que una, dos, tres, cuatro, cinco imágenes. Y le dije: Bien, crear una lista de nombres de archivo que contengan todo en la primera parte y luego JPG como extensión. Entonces eso creará una lista como say, C y luego la ruta aquí y luego Galax C, el GPG Y luego el otro camino de imagen y así sucesivamente, te das la idea. Y entonces lo que tenemos que hacer es iterar a través de esta lista para cada ruta de imagen en la lista de esta lista Haremos estas operaciones para cada uno de los elementos de la lista. Entonces primero, leemos esa trayectoria de imagen. Bien, ese archivo de imagen en realidad tiene una imagen en blanco y negro. Entonces cero es una bandera es argumento, lo que implica una tasa de imagen como blanco y negro en la escala de grises, en realidad. Después creamos una variable donde almacenaremos las imágenes redimensionadas Entonces la imagen es de 100 por 100. Estoy pasando la imagen original aquí y el tamaño, el nuevo tamaño que obtendrá la imagen. Entonces queremos mostrar la imagen solo para demostración. Esto no es realmente importante, pero te permite ver las imágenes que se están redimensionando Y este es el nombre de la ventana. Y luego paso aquí un método de llave húmeda, y 500 significa 500 milisegundos. Entonces cada imagen se mostrará y esperará medio segundo, 500 milisegundos. Y luego después de este medio segundo, Python pasará a la siguiente línea y luego a la siguiente y luego pasará al siguiente ítem de la lista y así sucesivamente. Así que espera clave 500 milisegundos, y luego tenemos destruir todas las ventanas después de que pase este tiempo Y luego escribimos la imagen redimensionada. Entonces RE era una variable que contiene el objeto image, el objeto image redimensionado Y esto de aquí, todo el es un nuevo nombre del archivo. Entonces lo que conseguimos aquí es así que tendremos recise en el inicio del nombre de la imagen Y luego justo después de eso, tendremos un nombre de la imagen original. Entonces por ejemplo, tendríamos para Galaxy, tendríamos ReciseGalaxy dot JPG Entonces la imagen aquí sería galaxy dot JPG aquí, que es esta de aquí. Y aquí, porque el script está dentro esta carpeta, esta lista, en realidad, la imagen es se vería algo así como Galaxy dot JPG, luego Canguros, ya sabes, Australia, punto GBG y así sucesivamente Entonces esto obtiene las rutas relativas de los archivos. No estamos consiguiendo el camino completo. Bien, espero que quede claro. Así que redimensionó Galaxy, podríamos agregar un guión bajo para que discriminemos la palabra recise del otro nombre de la imagen. Genial. Déjame ejecutar este script de Python. Entonces alfa segundo, Alfa segundo, y, si, ya está hecho. Y vamos a revisar las imágenes. Entonces de aquí arriba son las imágenes originales, y estos son los productos de imagen. Entonces puedes ver aquí que todos estos son 100 por 100. Y están en una escala de grises. Bien, eso es. Nos vemos en la próxima conferencia. 119. Detección de rostros en imágenes con OpenCv y Python: Hola, bienvenidos a esta nueva conferencia. Y aquí aprendes a detectar rostros. Y estaremos usando OpenCV con Python para detectar una o más caras a partir de una imagen Entonces, básicamente, ¿cómo funciona la detección de rostros de todos modos? Bueno, la idea es que alguien haya creado algunas cascadas, que son básicamente algunos archivos XML como éste Este archivo EML contiene información sobre las características que contiene una imagen de una cara Entonces estamos hablando de relación de las sombras de los ojos y nariz y labios y todas estas características, estos números de intensidad de píxeles que se almacenan se registran en este archivo XML, que se ha creado utilizando algunas imágenes con rostros como muestras de entrenamiento. Entonces básicamente, le dices a tus computadoras, Bien, todas estas son caras, y luego usas software como OpenCV para crear dichos archivos XML Entonces estas se llaman cascadas duras, y esta es una cascada dura para un objeto de cara frontal Y si quieres otros objetos, los puedes encontrar en este enlace aquí. Entonces tienes cuerpo completo, ojo izquierdo, y parte inferior del cuerpo y así sucesivamente. Alternativamente, puede utilizar una sección de recursos de esta conferencia. Se puede descargar en un archivo Zip con todas las cascadas duras XML Pero en esta conferencia, nos vamos a centrar en el frente de la cara. Así que vamos a estar usando esta cascada para detectar el pase. La forma en que funciona ahora es que cargaremos la imagen en Python, y luego le diremos a Python que este es un modelo que quieres buscar en la imagen y quieres encontrar este modelo, entonces el modelo XML en la imagen. Y lo que Python hará con la ayuda de OpenCV, comenzará a buscar toda la imagen usando una ventana Y luego cambiará el tamaño de la imagen, disminuirá el tamaño de la imagen, y usando la misma ventana, detectará para un pase más pequeño y así sucesivamente Vamos a pasar por eso paso a paso. Entonces escribamos el guión que detecte rostros. La impulsividad es lo primero que quieres hacer. Y entonces lo siguiente es que quieres leer la cascada en Python. Entonces llamemos a la cascada de fase variable. CV dos, y tenemos un método llamado clasificador en cascada. Entonces esto creará un objeto de cascada de fases en Python, y todo lo que tenemos que pasar aquí es el camino de la cascada del corazón. Eso es. Y eso creará un objeto clasificador en cascada. Y ahora puedes usar este objeto clasificador en cascada de la función de ritmo para buscar una fase en tu imagen Entonces, lo siguiente que quizás quieras hacer es cargar la imagen en Python, la imagen que quieres buscar cara. Digamos que la imagen es igual. Entonces ya sabes que podemos cargar imágenes en Python a través del método de lectura de imágenes del CV abierto, y puedes simplemente pasar el nombre de PG de photo dig aquí. Estoy pasando la ruta del archivo de esta imagen. Entonces no voy a pasar ningún segundo parámetro aquí. Eso significa que estoy leyendo la imagen como una imagen a color. Sin embargo, una buena idea es utilizar imágenes en escala de grises cuando se busca una cara Entonces cargué la imagen aquí, pero estaré usando la versión en escala de grises de la imagen al buscar una cara en esa imagen Eso se piensa que produce una mayor precisión al buscar rostros, ya que puede notar que cuando tiene imágenes muy ocupadas con muchas funciones, OpenCV no será 100% Por lo tanto, es posible que tenga caras que OpenCV se perderá, o puede obtener características que se clasificarán como Sin embargo, el uso de la imagen en escala de grises aumenta la precisión. Podría seguir adelante y pasar una bandera cero aquí para poder leer esta imagen como una escala de grises, pero en realidad me gustaría mantener la imagen original como una versión en color porque quiero mostrar la versión en color al final, pero usar la imagen gris. Pásalo a los métodos que vamos a estar buscando para la cara. Entonces voy a crear aquí una variable de imagen gris donde ordenaré la versión en escala de grises de la imagen. Entonces CV dos, y tenemos un método llamado CVT color, y que toma como argumento, la imagen original, por supuesto, y una bandera Entonces un argumento. Llamado Cv dos colores BGR dos grises Entonces, lo que esto significa es que esto convertirá la imagen BGR, así bandas azules, verdes, rojas, convertirá en una imagen de escala de grises A ver. Entonces, si quieres mostrar rápidamente esta imagen gris, si te gusta, Civ dos muestran imagen gris ahí Damos un nombre para la ventana, gris y la imagen que quieres mostrar, entonces necesitas pasar el parámetro de clave de peso aquí. Digamos cero, así presionaremos a Aiki y cerrará la ventana CV dos destruyen todas las ventanas. Entonces aprendes estos métodos en las conferencias anteriores. Déjame ejecutar esto. Entonces esta es una versión en escala de grises de la imagen. Ven. Ahora usaremos un método llamado detectar multiescala. Y lo que hará este método buscará el clasificador en cascada Por lo que buscará este archivo XML de cara frontal en nuestra imagen, y devolverá las coordenadas del ritmo en la imagen. Entonces, por ejemplo, esta es la imagen, y lo que devolverá este método es, va a encontrar la cara y dirá. Por lo que te dará el número de la fila y la columna del punto superior izquierdo de la cara. Entonces comenzará aquí y también te dará la altura de la cara y el ancho de la cara. Entonces obtenemos un rectángulo. Y luego dibujaremos ese rectángulo en la imagen. Entonces eso es básicamente, pero lo entenderás mejor. Y entonces necesitamos crear, digamos, una variable de objeto pass. Donde se almacenarán estos valores de X, Y, ancho y alto. Así que vamos a agarrar rápidamente eso. Entonces necesitamos referirnos al objeto clasificador en cascada, que es este de aquí Y lo que queremos hacer con este objeto es detectar la escala Mul ti, y quieres detectar la imagen gris Y luego quieres pasar el factor de escala ahí dentro. Sabes que cuando tienes muchos parámetros y hay demasiados para caber en una línea, después del coma, solo puedes presionar Enter y Python leerá tu línea ya que era una sola línea. Entonces se asegurarán de presionar Enter después del coma. Y así tenemos factor de escala. Y un buen valor para dar por esto sería 0.5. Ahora bien, ¿qué significa esto? De todos modos? Bueno, consideremos esta imagen. Lo que hará Python es que comenzará desde el tamaño original de la imagen, y buscará voy a crear una ventana que buscará caras en la imagen. Entonces busca en esta zona en esta zona en esta zona. Y así una vez que hace eso, luego al dar un factor de escala de 1.05, le estás diciendo a Python que disminuya la escala en un 5% para la siguiente fase de búsqueda Entonces, lo que Python hará es que reducirá la escala de la imagen en un 5% E investigará para caras más grandes en la imagen. Así que busca de nuevo, busca de nuevo, y luego disminuirla en un 5% nuevamente la imagen y buscar caras más grandes, y así sucesivamente hasta que llegue a un tamaño final. Entonces eso significa que un valor más pequeño significa mayor precisión. Si das, por ejemplo, 0.5 Pythond disminuye la escala en un 50% Por lo que partirá del tamaño original, y luego irá 50% más alto y así no obtienes mucha precisión con eso. El beneficio con este número es que el script se ejecutará más rápido. Entonces tendrás menos pases a la imagen buscando un rostro. El 0.5 es bueno. Bien. Y entonces tienes otro parámetro llamado vecinos mínimos. Eso suele establecerse en cinco. Y lo que básicamente es esto es que esto le dice a Python cuántos vecinos buscar alrededor de la ventana. Entonces es posible que desee experimentar un poco con estos números y ver cuál obtiene los mejores resultados. Pero estos dos son números bien aceptados. Entonces hagamos algo ahora. Imprimamos caras y veamos de qué se trata esto. Entonces, qué tipo de objeto es este. Y también podría imprimir el tipo de caras, así como así. Entonces voy a ejecutar el script ahora y lo que hará el script leerá este archivo XML y cargará la imagen, hará la versión en escala de grises de la imagen Y luego detectará las coordenadas de la esquina superior izquierda de la cara en la imagen y el ancho y la altura del rectángulo que define la cara en la imagen. Y luego imprimirá el tipo de las caras e imprimirá las caras, el objeto real de las caras. Entonces presione kit para salir de esto. Y así pace es una matriz NumPI, objeto de matriz N dimensional Y es una matriz con cuatro valores. Entonces hemos detectado nuestra cara estos son valores básicamente definiendo la fase en la imagen. Entonces básicamente lo que tenemos aquí es, entonces esta es 155, que debería ser la columna 155 Entonces esta es la X. Entonces el rectángulo debería comenzar en algún lugar aquí en la frente. Y esto debería ser 83. Entonces la fila 83, columna 155, y luego tenemos la anchura, que es 382 y la altura, que es la misma. Y así tenemos un rectángulo en la cara. Ahora, sigamos adelante y dibujemos ese rectángulo en la cara en la imagen. Así que creamos la matriz de caras. Y entonces lo que queremos hacer es acceder a todos estos valores de esta matriz. Para ello, podemos usar un bucle de cuatro. Entonces cuatro X, Y, ancho y alto en caras. Bueno, imagen. Entonces estamos actualizando el objeto de imagen que hemos leído aquí, hemos cargado aquí, así lo actualizaremos dibujando un rectángulo en la imagen. Y nuevamente, hay que pasar el objeto de imagen aquí, y luego hay que pasar cuatro argumentos más. El primer argumento sería el punto de partida del rectángulo. Entonces eso sería X e Y. Entonces estas coordenadas de la matriz de fase. Genial. Y entonces el siguiente parámetro es otra tupla que define las coordenadas de la otra esquina de la imagen Así que tenemos la esquina superior izquierda aquí, y tenemos la esquina más baja derecha aquí abajo. Entonces lo que eso sería es X más el ancho. Y Y más la altura. Eso es. Otro parámetro más. Este sería el color que le quieres dar a este rectángulo. Entonces eso viene como un formato BGR. Entonces quieres pasar valor por el color azul. Entonces digamos cero para azul, y vamos a tener un rectángulo verde. 255 para verde. Entonces tendremos un verde completo ahí, y luego cero para el rojo. También se puede pasar otro parámetro, que sería el ancho del rectángulo. Digamos tres. Bien. Y una vez que haces eso, así una vez que hayas actualizado tu imagen, es posible que quieras mostrar tu ventana de imagen en la pantalla ahora. Así que usamos el método image show, pero aquí tenemos una imagen gris, así queremos pasar objeto imagen actualizada. Y deberíamos estar bien para irnos. Guarda el guión, ve e intenta ejecutarlo. Y mi sistema no está siendo capaz de encontrar la cara atx it dot py. Sí, he estropeado algo con un nombre aquí, así que déjame cambiar este punto py, Enter Entonces nada que ver con el guión. Y déjame intentarlo de nuevo. Genial. Entonces espero que esto sea lo que esperabas. Entonces el rectángulo empieza aquí y tiene una anchura y una altura, y termina aquí dentro. A veces, sin embargo, como ya sabrás, es posible que tengas imágenes que son más grandes que la resolución de tu pantalla. En ese caso, tu imagen no cabría en tu pantalla en tu pantalla. Entonces lo que podrías hacer es redimensionar la imagen antes de mostrarla. Entonces déjame crear una variable redimensionada aquí, y eso sería igual a cv dos redimensionar, y quieres pasar imagen, que contiene el rectángulo ahí, y quieres cambiar el tamaño de la imagen a estos Por lo que es necesario establecer la resolución de la imagen aquí. Y como saben, aquí solo pueden poner algunos valores, digamos, 500 por 500. Pero estos valores podrían estirar tu imagen, por lo que una mejor solución sería acceder a la forma de la imagen. O la resolución de la imagen, y este debería ser el ancho de tu imagen. Entonces ya lo sabes. Yo explico esto. Así que solo estoy pasando por esto rápidamente, y para asegurarme de que obtengas un buen tamaño, podrías dividirlo por tres. Y luego otra vez, en forma, se obtiene la altura, que es el primer valor de la tupla y se vuelve a dividir por tres Y también quieres convertir estos dos enteros porque podrías obtener números flotantes, y Python dirá que no puede cambiar el tamaño de una imagen a números flotantes Entonces eso debería estar bien. Entonces quieres mostrar la imagen redimensionada. Probándolo rápidamente. Me falta el soporte aquí, así que esto debería ser un derrocar todo esto, pero aquí no lo estoy comenzando como un derribo Entonces corchete aquí y cierra aquí. Eso debería funcionar ahora. Sí. Entonces, esta era mi foto, pero probemos ahora una imagen más desafiante. Éste de aquí. Entonces tenemos dos caras que no están muy claras. Esta no es una fase frontal real. Este tipo de aquí, tiene los ojos cerrados y su barbilla no es visible. Y también tenemos estas dos caras aquí en los periódicos, que me dejan abrir la imagen original a partir de aquí, que básicamente tienen muy baja resolución, y creo que Python no podrá detectar estas dos caras. Entonces déjame revisar esto. Aquí está nuestro detector facial, y queremos pasar el nombre del nuevo archivo de imagen. Guarde el guión y continúe y ejecútelo. Así que tenemos algunos de vuelta a la realidad aquí. Y como ves esta vez, Python y OpenCV pudieron detectar esta fase, aunque no esté en una posición muy frontal Y obviamente, también fue capaz detectar la mano de este tipo. Entonces Python lo lee como una fase. Y lo que puedes hacer en este caso es ajustar estos valores aquí, así factor de escala y los vecinos mínimos Algo que también te puede interesar saber es que la matriz de fases aquí tiene dos listas en este caso. Entonces esta es la primera fase, las coordenadas de la primera fase, y luego la segunda fase. Que en este caso, pasa a ser de la mano, pero de todas formas, entiendes la idea. Entonces probablemente al usar tal vez una escala 1.1, es posible que puedas deshacerte de esa mano. Entonces sí, eso es todo. También puedes probar para detectar el ritmo de este tipo, pero no creo que puedas hacerlo. Entonces solo que sepas que estas técnicas tienen limitaciones. Entonces es una computadora. No es un ser humano, así que siempre tendrá algunas desventajas en la precisión Espero que hayas encontrado esto tan bajo, y te veré en la próxima conferencia. 120. Captura videos con OpenCv y Python: Hola, bienvenidos a esta nueva conferencia. Y en esta conferencia, estaremos usando OpenCV para capturar video desde la webcam de la computadora Entonces necesitarás OpenCV y lo importarás como CV dos, como ya sabrás OpenCV es lo que utilizamos para el procesamiento de imágenes, y, por supuesto, el procesamiento de video porque el video está hecho de Entonces tenemos muchas imágenes y se las conoce como marcos. Y estos fotogramas, estas imágenes están mostrando una tras otra en alta velocidad, y luego podemos ver esas imágenes como video. Y o odiarás esta conferencia o te encantará. Lo que vamos a hacer es que vamos a ir en un nivel muy bajo de procesamiento de imágenes aquí de procesamiento de video. Estaremos leyendo fotogramas uno por uno, así imágenes una por una. Y verás que cómo usamos loops en Python para mostrar esas imágenes y construir realmente una ventana donde las imágenes se muestren rápido, y la puedes ver como un video. Entonces, si tienes un portátil, probablemente tengas una cámara de construcción. Si tienes un escritorio sin cámara, necesitarás una cámara externa para seguirme en esta conferencia. Y ahora, lo primero que quizás quieras hacer es leer un video. Entonces una vez lees un video, así podrás leer un video ya sea desde la webcam o desde un archivo de video. Y una vez que lees el video, entonces puedes aplicar otras operaciones como encanecer el video o agregar texto al video o detectar objetos en el video, etcétera Entonces lo primero que quieres hacer es crear un objeto, digamos, video, y eso será igual a cv dot Captura de video. Entonces ese es el método que activa un objeto de captura de video. Y eso obtiene un argumento aquí, que puede ser o bien un número como cero, uno, dos, tres, o la ruta del archivo de video. Entonces, cuando pones un número, eso implica que estás capturando video de una cámara. Entonces digamos, tengo una cámara incorporada en mi computadora, pero también tengo una cámara externa. En ese caso, una de mis cámaras tendrá un índice de cero, la otra cámara tendrá un índice de una, y si tengo una tercera cámara, tendrá un índice de dos y así sucesivamente. Entonces, eso es todo. Si tuvieras un archivo de video, podrías simplemente decir película punto mp cuatro o algo así. Depende del nombre de tu archivo de video, y tendrías que tener este archivo en algún lugar de tu computadora. Pero en esta conferencia, estamos hablando de capturar video desde la webcam. Entonces solo tengo una webcam en mi computadora, así que voy a pasar cero aquí. Eso es. Una vez que hagas eso, quieres asegurarte de que liberarás. La cámara. Entonces quieres acceder a tu objeto, Video dot release es el método. Y entonces no hace falta pasar ningún argumento ahí. Entonces veamos qué tenemos si ejecutamos esto. Este archivo Python. Python, capture punto pi es el nombre de mi archivo. Y obviamente, no pasa nada. Pero de mi lado, noté que mi cámara estaba encendida por un segundo o por una fracción de segundo. Entonces se encendió la luz de la cámara y luego se cerró. Se apagó de inmediato. Entonces lo que pasa es que en realidad activamos la cámara aquí, la webcam, pero luego inmediatamente soltamos la cámara. Entonces, lo que Python hará es que abrirá la cámara y en un milisegundo más o menos liberará la cámara Déjame intentarlo de nuevo. A veces puede suceder que ni siquiera veas una luz en absoluto. Entonces no lo ves porque el proceso pasa muy rápido. Así que probablemente tu computadora necesite algunos segundos para encender realmente la luz de tu cámara. Y podemos darle algunos segundos, entonces. Para hacer eso, desea importar la biblioteca de tiempo incorporada. La biblioteca de tiempo proporciona algunas operaciones relacionadas con el tiempo. Y así, por ejemplo, en nuestro caso, lo usaremos para mantener el script durante 3 segundos. Entonces lo que esto hará es que Python intentará ejecutar el script línea por línea, lo que importará CV dos a tiempo, y luego activará la cámara. Y luego antes de soltar la cámara, tendremos el guión esperar 3 segundos. Por lo que esto será ejecutado. Espere 3 segundos, y luego ejecute el otro método. Eso es. Ahora, déjeme ejecutar esto de nuevo. Bien, la luz está encendida. Uno, dos, tres, apagado. Sí. Y se estrena el video. Ahora, a lo mejor estás pensando, ¿por qué no vemos tu cara ahí apareciendo en la cámara de video en la ventana? Bueno, la razón es que, ¿ves alguna línea aquí que esté mostrando una ventana? No. Entonces, ¿por qué esperas que mi cara se muestre ahí? Y la forma en que lo hacemos es creando primero un objeto frame, que leerá las imágenes de este objeto de captura de video. Y déjame hacerlo primero antes de entrar en más explicaciones. Entonces déjenme decir cheque marco. Eso sería igual a video dot RED, así como así. Entonces, lo que estamos leyendo aquí es que tenemos un tipo de datos booleanos aquí y una matriz de árbitro Entonces déjame imprimir esto para que entiendas mejor. Así que revisa primero y luego imprime el marco. ¿Bien? Ejecute el script. Espera 3 segundos y ciérralo. Entonces lo que tenemos aquí es, voy a ampliar esto. Así que llegamos a través de la variable check. Y obtuvimos la matriz numpi, que representan la imagen Esta imagen es en realidad la primera imagen que captura el video. Este año, el lingote, podemos usarlo para diversas operaciones como comprobar si el video se está ejecutando o no Por lo que tal vez tengas que comprobarlo mientras haces tus programas. Y el frame es el más importante porque usaremos el objeto frame, así que usaremos esta matriz de árbitros, que es una matriz tridimensional porque es una imagen en color, por lo que tiene tres bandas Y esto lo sabes de las conferencias anteriores donde hicimos procesamiento de imágenes. Bien. Y recorreremos este marco y lo mostraremos usando el método de show de imágenes. Así que estoy show image show método de CV dos biblioteca. Entonces mostraremos recursivamente cada fotograma de video que se está capturando Entonces espero que eso tenga sentido. Entonces antes de hacer eso recursivamente, me gustaría mostrar una ventana aquí abajo. Entonces cv dos, muestro, y pongamos un nombre para la captura de la ventana y pasemos ahí el objeto frame. Y también, recuerda que cuando pasas un método de show de imágenes, así que cuando estés mostrando una ventana, quieres asegurarte de que la ventana esté cerrada. Y lo haces usando el método de la tecla de peso Cv, y puedes pasar cero para permitirte presionar cualquier botón y cerrar esa ventana. Y lo que quieres hacer es cv dos destruir todas las ventanas. Entonces cuando se presiona este botón, destruyes todas las ventanas. Y en realidad, quieres poner esto aquí arriba, que el video no se suelte antes de presionar esta tecla. Entonces lo que pasa es que Python ejecuta estas líneas, y luego te espera para presionar la tecla, y luego libera el video, y luego destruye la ventana real que estás viendo en Bien, veamos qué va a pasar ahora. Sorpresa, sólo tengo dos dientes. no lo sabías. Bien, estoy bromeando. Tengo más. Pero entonces lo que Python hizo aquí es que activó la cámara. Entonces activó la cámara aquí, y luego leyó el primer fotograma del video. Entonces el primer fotograma tan pronto como la cámara se dispara, lee el primer fotograma y luego imprimimos ese fotograma y está aquí en algún lugar de la línea de comandos, y luego el guión durmió 3 segundos, así que no hizo nada. Esperó 3 segundos, y luego CV dos con el método AMShow, creó una ventana donde mostraba el primer fotograma del video Entonces la imagen que acabas ver es el primer fotograma del video. Y luego el marco real, la ventana sigue abierta, así que está esperando una llave para que presionemos. Entonces, si presiono una tecla ahora, estas dos últimas líneas serán ejecutadas. Entonces eso significa que se lanzará el video y esta ventana destruirá. Entonces presiona la tecla, y si, eso pasó. Entonces Python está procesando un fotograma de video igual de imágenes simples. Eso significa que también puedes aplicar métodos como cv dos puntos, color CVT Y puedes pasar ese cuadro aquí y luego guardarlo en color gris BGR Guárdalo en una variable gris. Entonces lo que estoy haciendo es que estoy convirtiendo el fotograma, así el fotograma de color en una imagen gris. Y en realidad, tengo que hacer esto aquí arriba. Y luego puedo mostrar aquí la versión en escala de grises de la imagen. Bien, déjame intentarlo de nuevo. Entonces esa es una versión en escala de grises que se está mostrando usando el método imshow. Entonces esa es la idea. Ahora bien, ¿qué tal mostrar un video real, ni una sola imagen ahí? Bueno, la respuesta es que aquí necesitamos usar un wild loop. La razón por la que necesitamos hacer eso es que un bucle while, lo que hace es que ejecuta algunas declaraciones infinitamente hasta que rompes el bucle en un punto determinado usando declaraciones como break, por ejemplo Entonces la idea es que tenemos que poner todo el código hasta aquí. Así que tenemos que ponerlo en un bucle while, y voy a hacer precisamente eso. Entonces puedes usar un atajo desde tu teclado dependiendo tu teclado o ir a editar líneas y luego sangrar para sangrar estas Entonces aquí hay un atajo. Pero de todos modos, entonces quieres escribir mientras sea verdad. Y entonces todo va dentro del bucle salvaje tan fácil como eso. Pero aún no hemos terminado. Tenemos algunas cosas más que hacer aquí. Pero antes que nada, me gustaría asegurarme de que entiendas el bucle wil. Así que déjame activar la consola Python aquí rápidamente. Entonces, lo que hace Wil loop es eso, digamos que si bien es cierto, print. Digamos uno. Si ejecutas eso ahora, uno se imprimirá infinitamente Entonces mi consola se está poniendo muy ocupada aquí, y puedo interrumpir esto usando una operación de interrupción del teclado, así Control C o controlar eso si eso no funciona. Entonces Wilby está diciendo que si bien es cierto, que siempre será cierto, ejecutar estas líneas Pero si trato de ejecutar esto ahora, lo que va a pasar es que Python activará la captura de video de captura, y mostrará la ventana, pero es solo una ventana. Entonces solo una imagen es la primera imagen del video. Porque lo que está pasando es que el bucle de cable arranca, pero va. Crea un fotograma, el primer fotograma de video. Entonces el fotograma actual, que es el primer fotograma donde comienza el video, luego convierte el fotograma en una imagen en escala de grises. Y luego se resbala por 3 segundos, ¿de acuerdo? Después se muestra la imagen. Y entonces lo que hace el bucle i aquí, espera a que presiones una tecla Entonces si presionas una tecla, el proceso se detiene. Entonces lo que puedes hacer en este caso es ingresar a otro. Déjame hacer algo de espacio ahí. Entonces hay que alterar este valor aquí, entonces los argumentos. Cuando ingresamos a cero, significa que cualquier tecla que presiones en el teclado, cerrará esa ventana. Pero si ingresas, digamos, 2000, eso significa que el script esperará 2000 milisegundos, que son 2 segundos. Y veamos qué va a pasar aquí. Entonces muestra mi cara primero, luego espera 3 segundos aquí. Entonces espera otros 2 segundos. Después se muestra el otro marco. Entonces es muy lento, así como así. Bien. Ahora bien, si presionas alguna tecla, no pasará nada porque eliminas el cero de aquí. Entonces en ese caso, voy a detener forzadamente el guión aquí, Control C. Ya no necesitamos este deslizamiento de tiempo, y también necesitamos un condicional Y antes de hacer eso, almacenaremos esta acción en una variable clave. Y luego decimos que la tecla es igual a o el método, y luego se pasa una tecla del teclado. Entonces, si el igual a Q, entonces rompa el bucle while. Y pongámoslo mil esta vez. Bien. Entonces ahora lo que esto va a hacer es que captará el video, yo arrancaré el video, y luego iterará a través de todas estas líneas Entonces creará un marco, lo convertirá a gris y mostrará el marco aquí, y luego esperará 1 segundo. Y si presionas la tecla del teclado, se romperá el bucle de cable. Y luego si se rompe, y se ejecutará el video que suelte, así el video se detendrá y se destruirá la ventana. Pero si no presionas ninguna tecla, esto esperará 1 segundo, entonces mostrará el siguiente fotograma. Y luego después de 1 segundo , mostrará el siguiente fotograma y así sucesivamente. Entonces, guarda el script, ejecuta. Entonces el video está mejorando. Sí, ahora se ve bien. Bien, si presionas Q, lo detendrás. Bien, vamos a mejorarlo más. ¿Por qué no un milisegundo? Oye, ¿cómo estamos? Entonces, está funcionando bien. Y también puedes ver aquí que el lingote de cheques, el NumPirea se está imprimiendo Y ya podemos detener esto si presionamos Q, así como así. Ahora bien, si quieres saber cuántos fotogramas se están generando ahí, hay un buen truco que podríamos hacer. Podríamos crear una variable, digamos, A es igual a una fuera del bucle y. Y entonces aquí, usted dice, A es igual a A más uno. Entonces después de que el bucle se rompa aquí, quieres imprimir A. Entonces lo que esto hará es, cuando ejecutes el script, obtiene un valor de uno y luego cuando el bucle de pared comienza a correr, así pasará por la primera iteración, y aumentará el valor de A en uno Entonces A equivale a uno más uno. Entonces serán dos. Por lo que A se actualizará a dos. Entonces irá hasta el final y luego volverá a arrancar. Por lo que esta vez volverá a ser A, equivale a dos más uno. Entonces A será tres en la segunda iteración, y así sucesivamente, o puedes poner esto a uno en realidad Entonces, si tenemos dos iteraciones, eso significa que A será dos, y si tenemos tres, será tres y así sucesivamente Y luego imprimimos A aquí fuera del bucle, ¿de acuerdo? Y veamos qué tenemos. Voy a mantener el video funcionando durante 3 segundos, y veremos cuántas iteraciones tendremos Así que captura uno, dos, tres, y detente. Entonces el último valor que se imprimió aquí es un valor. Eso significa que tuvimos 51 iteraciones en aproximadamente 3 segundos, lo que es, digamos, alrededor de 20 fotogramas por segundo Entonces nuestra cámara, mi cámara está capturando 20 fotogramas por segundo. Déjame ejecutar esto una vez más, la última vez. Entonces si pongo mi dedo aquí en la cámara, entonces oscurecí la imagen y verás que la matriz numpy ahora es cero, cero, cero Debido a que los marcos de la imagen, todo lo que tiene son valores cero. Entonces hay cero intensidad en la imagen. Oh. Bien, eso es lo quería mostrarte en esta conferencia. Entonces como dije, una vez que tengas estos marcos, puedes aplicarles operaciones, así puedes dibujar rectángulos ahí, detectar imágenes, y así sucesivamente Lo haremos, así que construiremos nuestra aplicación del mundo real. Al implementar alguna detección de movimiento en nuestros fotogramas, y luego capturaremos las veces que un objeto ingresa a nuestro fotograma, o video, y tendremos una lista de esos tiempos. Entonces espero que te guste esta conferencia, no la odie, y te veré en la siguiente 121. Aplicación 3: aplicación de detector de movimiento con webcam: Bienvenidos a esta nueva conferencia por supuesto, y esto es bastante especial. Resulta que estoy en cámara porque en esta conferencia, lo que vas a construir es un programa que detecte objetos en movimiento frente a una cámara web de computadora. Y luego lo que hace, registra la hora en que el objeto ingresó a la webcam. Entonces el fotograma de video y la hora en que el objeto salió del fotograma de video Entonces ahora hay un objeto en movimiento. En el encuadre y si me voy, ya ves que ahora no hay ningún rectángulo verde en el video. Y ahora vuelvo a aparecer, muevo otra vez, y así sucesivamente. Así que vamos a construir esta aplicación desde cero usando Python. Sí, tenemos muchas cosas que aprender, como el procesamiento de imágenes y el procesamiento de video también, y así sucesivamente. Y por último, lo que hacemos entonces si presionas Q para dejar de fumar, lo que obtienes es una gráfica. Y como dije, la gráfica mostrará tiempos en los que el objeto ingresó al fotograma. Entonces estamos tratando con un gráfico interactivo aquí. Y si, estas son las veces las que el objeto entraba a la webcam, como esta de aquí, y aquí dura más. Y así, bueno, esta puede ser una gran aplicación si quieres detectar objetos. Puedes lanzar puedes poner esta aplicación de este programa Python en el servidor Raspberry, por ejemplo, que es un servidor pequeño, y puedes ponerlo en algún lugar tal vez quieras detectar animales. Es posible que desee saber cuándo este animal está entrando al marco y cuándo está saliendo o con personas también, si es el caso Entonces sí, este es un programa, y espero que lo disfrutes. Tenemos bastante código para escribir, así que comencemos, y hablaré contigo en la próxima conferencia. 122. Detección de objetos en movimiento desde el campamento web con Python: Oye, aquí estamos otra vez. Y en esta conferencia, seguiremos construyendo nuestro programa de detección de movimiento en el mundo real. Ahora, antes de ir a escribir el código, primero me gustaría explicarles la arquitectura del programa que vamos a construir. Entonces, cómo este programa es capaz de detectar movimiento en el video. Y supongo que ya sabes cómo construir este guión. Así que construimos esto en las conferencias anteriores. Y lo que hace este guión es que en caso te lo hayas perdido, Oye. Entonces lo que esto hace es que desencadena el video, como tú así. Desde la webcam de la computadora. Entonces estamos procesando marcos aquí en este bucle de Wile, y así sucesivamente Entonces ya lo sabes. No voy a pasar por ellos ahora mismo. Entonces, lo que tenemos que hacer a continuación es que necesitamos procesar esos marcos que se están iterando en este bucle de Wile Y aquí tengo algunas fotos para ilustrar mis ideas, mis conceptos. Déjame ir al directorio donde se encuentran. Y entonces lo que hará este programa de detección de movimiento es que activará la cámara web tal como lo hace nuestro script actual. Y una condición para que el programa funcione bien es que una vez que actives la webcam, el primer fotograma del video debería ser el fondo estático. Entonces, si estás planeando usar este programa, digamos que configuras una cámara web en una computadora portátil o un servidor de pastel de frambuesa. Digamos que quieres detectar el movimiento de cierto animal en una zona. Entonces primero, quieres activar la cámara mientras el fondo esté estático, y luego quieres usar este fondo como imagen base para que puedas comparar las otras imágenes. Y entonces Python puede detectar si hay un cambio entre el primer fotograma y los siguientes fotogramas. Entonces eso es una cosa que debes hacer. Y entonces este es un ejemplo de antecedentes. Y luego algo, el animal aparecerá en tu cámara. Entonces lo que tienes que escribir en tu guión en el programa es al principio, nos gustaría gris esta imagen, así la imagen de fondo y el fotograma actual de la cámara. Almacenarás el primer fotograma de la captura de video en una variable y luego convertirás ese fotograma en una imagen en escala de grises Entonces el iloop pasará por los fotogramas actuales y tú harás lo mismo para el fotograma actual, así los convertirás a escala de grises y luego lo que harás estas dos imágenes en escala de grises de la iteración actual del bucle, aplicarás la diferencia entre Esta es la diferencia, un ejemplo de marco de diferencia de marco Delta, si se puede decir así. En esta imagen en particular, notarás que detrás de mí, hay una lámpara de la habitación. Normalmente, no se puede ver la lámpara, pero Python en realidad está haciendo la diferencia entre el marco donde estaba apareciendo y el marco de fondo donde la lámpara es visible. Entonces se le ocurre esta imagen gris donde cada píxel tiene un cierto valor. Por lo que tiene algunos valores de intensidad. Todo bien. Entonces eso significa, por ejemplo, los valores de alta intensidad como este donde estoy significa que aquí hay movimiento potencial en esta área. Mientras que las zonas negras implican que no hay movimiento. Pero también se ven algunos píxeles claros, negros aquí porque cuando aparezco en cámara, hay sombra detrás de mí y así sucesivamente. Pero vamos a aplicar algo más adelante, que se llama el umbral. Entonces básicamente diremos que si ves una diferencia en el cuadro Delta en el fotograma que acabo de mostrarte, si ves una diferencia de más de 100 intensidad, convierte esos píxeles a píxeles blancos, ¿bien? Y para los píxeles que están por debajo del umbral, conviértelos a negros. Bien. Entonces se te ocurre el contorno del objeto que se mueve en la cámara en el marco. Entonces estamos haciendo todos estos procesos dentro del bucle wile. Y luego una vez que hayamos calculado el marco umbral dentro del bucle, lo que haremos con el fotograma actual es encontraremos los contornos de los objetos blancos en el marco. Bien. Entonces, para esta imagen en particular, tendríamos contornos alrededor de este objeto aquí y los contornos alrededor de este y alrededor de este también. Después escribiremos un bucle de cuatro que iterará a través de todos los contornos del fotograma actual Va a ir a este contorno a esto, éste y a éste. Y luego dentro de ese bucle, lo que haremos comprobaremos el área de los contornos. Entonces esto, por ejemplo, tiene un área de, digamos, 500 píxeles. Entonces, si el área del contorno es de más de 500 píxeles, por ejemplo, entonces considera esto como un objeto en movimiento. Si el área es, digamos, menos de 500, como esta de aquí probablemente sea de 20 píxeles, digamos, esto no se considerará objeto móvil. Espero que eso tenga sentido. Entonces lo que haremos a continuación es dibujar un rectángulo alrededor de los contornos que fueron mayores que el área mínima. Eso mostrará esos rectángulos en la imagen original. Así que en la versión en color del fotograma actual. Eso significa que veremos un rectángulo en el video mientras se reproduce el video, veremos un rectángulo alrededor del objeto. Posteriormente, detectaremos las veces que el objeto, el objeto en movimiento ingresó al, el fotograma de video en el momento en que el objeto salió del fondo Pero por ahora, centrémonos simplemente en detectar el objeto, el objeto en movimiento en el video. Bien, y volvamos al guión. Cierra esto y esto y esto. Bien. Y vamos a quitar algunas líneas innecesarias aquí. Entonces teníamos una variable aquí, que creamos porque queríamos ver cuántos fotogramas teníamos en el video. Entonces ya no necesitamos eso, y no necesitamos que el script se detenga por 3 segundos. Entonces me quito el tiempo que se deslice y esta la vi. Bien. Y ahora aquí, la primera parte es la más difícil Necesitamos encontrar una manera de almacenar el fotograma actual del video. Así que en cuanto comience el video, queremos almacenar esa matriz numpy en una variable y tener esa variable estática, así que no queremos cambiar el valor de esa variable mientras while loop se ejecuta en el script Y la forma de hacerlo es que primero necesitaríamos crear un marco variable para el primer fotograma. Entonces necesitamos asignarle un no valor. Entonces ninguno es un tipo de datos especial de Python que te permita crear una variable y no asignarle nada, pero ahí tienes la variable. Entonces, si llamas a esta variable más adelante, Python no dirá que la variable no está definida. Bien, si no lo entiendes, por favor espera y lo consigues dentro de un rato. Y lo que hay que hacer ahora es escribir un condicional y aplicar una declaración continua ahí dentro. Déjame escribir primero el condicional y luego te explicaré qué hace esto. Entonces queremos verificar si el primer fotograma no es Y si se sabe, asignaremos el primer fotograma, el marco gris. Entonces lo que esto hace es que se ejecutará el script, se activará el video. Entonces el bucle de cable comenzará a correr, y obtendrá el primer fotograma o video, y lo almacenará en esta variable de fotograma. Esta variable de marco se convertirá en un marco gris. Y entonces decimos, si se conoce el primer fotograma, lo cual es cierto en la primera iteración del bucle, esto es cierto Así que el primer fotograma en realidad no es porque asignamos ninguno aquí. Asigne el NumPi al primer fotograma. Entonces, al primer fotograma, obtendrás la imagen en escala de grises, que representa el primer fotograma del video Entonces esto sucede en la primera iteración del bucle, ¿de acuerdo? Pero entonces lo que sucederá es que Python ejecutará estas otras líneas de código, y luego irá al segundo bucle. Y lo que Python hará es que agarrará el segundo fotograma de video. ¿Bien? Digamos que el primer fotograma fue una imagen de fondo, y luego de repente aparece un objeto en la cámara frente a la cámara. Entonces Python agarrará una matriz de árbitro que contiene ese objeto Entonces el segundo fotograma y este fotograma se convertirán a gris. Entonces aquí decimos que el primer fotograma es ninguno, la primera variable de fotograma, obtendremos el primer fotograma del video. Y una vez que hemos agarrado el primer fotograma, no queremos que se ejecuten estas otras líneas de código Porque aquí, aplicaremos la diferencia entre fotogramas y difuminaremos los marcos y así sucesivamente Entonces no queremos que estos sean ejecutados. En cambio, queremos que Python vaya al inicio del bucle y continúe con el segundo fotograma. Para ello, tenemos que continuar aquí. Entonces esto significa continuar hasta el inicio del bucle y no ir a ejecutar el resto del código. Bien. Entonces el primer fotograma no es ninguno. El primer fotograma obtiene el valor de la primera imagen del video, luego pasa a la siguiente iteración Entonces la siguiente iteración, lo que haremos es agarrar el segundo fotograma del video y luego calculará la versión gris de ese fotograma Y luego vuelve a pasar al condicional. Y en este caso, ¿ el primer fotograma es ninguno? No, no es porque el primer fotograma obtuvo el valor de la imagen gris en la primera iteración del bucle while Entonces estas líneas aquí no se ejecutarán en la segunda iteración del bucle, ¿de acuerdo? Genial. Eso significa que ahora podemos aplicar marco Delta, así podemos calcular la diferencia entre el primer fotograma y el fotograma actual de la imagen. Entonces el primer fotograma es la primera variable de fotograma y el fotograma actual es una variable gris. Pero antes de eso, nos gustaría hacer algo al fotograma actual de la imagen. Queremos aplicar un desenfoque gaussiano a la imagen. Y un punto aquí. Entonces, la razón por la que queremos aplicar desenfoque gaussiano es que queremos difuminar la imagen, por lo que queremos hacerla borrosa, así suavizarla porque eso elimina ruido y aumenta la precisión en el cálculo de la diferencia Entonces esto obtiene como parámetro, la imagen que desea difuminar. Y luego así estamos pasando la imagen gris aquí y estamos almacenando nuevo la versión borrosa de la imagen en la imagen gris Y luego tenemos otro parámetro que viene como una tupla, y aquí necesitamos pasar el ancho y la altura del kernel gaussiano Entonces que son básicamente los parámetros de la borrosidad, pero 21 serían aceptados números Y también necesitas otro parámetro perdido. Entonces esa sería la desviación estándar y pasaré cero. Cero aquí también se usa comúnmente. Si quieres aprender sobre ellos, puedes revisar la documentación, pero estos valores serían buenos. Así que aquí estamos haciendo borrosa la imagen gris. Entonces aquí abajo ahora, necesitamos comparar el primer fotograma de la imagen, así el fondo con el fotograma actual. Llamemos a esto el marco, y eso sería igual a cv dot apps diferencia. Entonces diferencia absoluta entre el primer fotograma y el fotograma actual, que es gris. Tenga en cuenta que el primer fotograma también será una versión gris, una versión gris borrosa, en realidad Entonces estamos comparando aquí con imágenes borrosas en escala de grises. ¿Bien? Y lo que esto nos va a dar es otra imagen, ¿de acuerdo? Y en realidad, me gustaría mostrar esa imagen aquí en la pantalla. Espectáculo de imagen CB dos. Marco Delta. Veamos qué sacaremos de esto. Y antes de ejecutar el guión, desapareceré primero de la vista y después apareceremos. Nuevamente, veamos. Bien, no pasó nada porque olvidé ingresar el nombre de la ventana. Llamemos a esto Delta. Marco. Y digamos marco gris para esto. Ahora déjeme ejecutarlo de nuevo. Y aquí estoy. Entonces esta es una versión borrosa en escala de grises que está aquí, y tenemos la diferencia Bien. Para que puedas ver la lámpara detrás de mí en el marco Delta. Genial. Presiona el Qiki y deja el video Ahora, si quiero imprimir, sólo para comprobar el cuadro delta, Esto nos permitirá ver la diferencia entre intensidades de los píxeles correspondientes Entonces déjame ver. Y si dejo esto ahora. Aquí vamos. Entonces lo que tenemos aquí cinco significa que no hay diferencia. Entonces en esta zona, no hay movimiento, probablemente, pero entonces tienes 174, que es bastante blanco. Entonces eso significa que Python clasificará esto como movimiento. Bien, eso fue solo para mostrarte los valores del marco de datos. Lo que necesitamos ahora es clasificar estos valores. Entonces digamos que queremos asignar un umbral. Entonces digamos si tenemos valores que son más de 30, así que si la diferencia entre el primer fotograma y el fotograma actual es superior a 30, lo clasificaremos como blanco Entonces diremos que probablemente haya movimiento en esos píxeles. Entonces hay un objeto en esos píxeles. Y si la diferencia es menor a 30, le asignaremos pixel negro. ¿Bien? Entonces podemos hacer eso. Entonces estamos aquí. Podemos hacerlo usando el método umbral de la biblioteca CV dos. Digamos que Delta fresco equivale a cv dos, el umbral. Y lo que esto espera es la imagen. Que desea umbral, y luego desea especificar un límite de umbral. Entonces 30 nosotros a los 30. Y ¿qué color quieres asignar a los valores que son más de 30? Bueno, se quiere asignar un color blanco que corresponda al valor 255. Bien. Y también se necesita un argumento más aquí, que es el método de umbral. Hay bastantes métodos por ahí, pero estamos usando este método aquí. Entonces umbral binario. Puedes experimentar con otros si quieres. Genial. Y ahora veamos cómo se verá este cuadro Fresh Delta. CV dos muestran el marco de thresh, bien. Delta Fresco. Genial. A ver. Al parecer, escribí este cuadro Delta equivocado, no marco Delta. Y un error tipográfico más en la línea 19, que es aquí CV dos Bien, esperemos que esta vez funcione. Y otro error más. Esta vez me he perdido algo aquí. Bien. Este método aquí, por lo que el método threshold realmente devuelve una tupla con dos valores Y el primer valor es necesario cuando usas otros métodos de umbral. Entonces, el primer ítem de la caída básicamente sugiere un valor para el umbral si estás usando otros métodos Pero para el binario umbral, solo necesitas acceder al segundo elemento de la tupla, que es el frame real que se devuelve A partir del método umbral. Entonces quieres acceder al segundo elemento de la tupla. Bien, te prometo que esto es un error de pérdida. Genial. Por último, y esta es la trama umbral. Mira puedes ver mi contorno ahí, pero también ves algunas áreas blancas aquí por las sombras. Entonces me están detectando como un objeto, pero mis sombras así como también están siendo detectadas como objetos. ¿Bien? Entonces entiendes la idea. Ahora, podemos irnos enseguida y usar este marco delta de thresh, que lo llamé thresh Debería llamarlo el thresh frame, ya sabes, solo por consistencia de nombre Así podemos seguir adelante ahora y crear contornos de los objetos blancos en el marco de thresh Pero antes de eso, me gustaría hacer otra cosa. Me gustaría retrasar esas zonas. Entonces quiero quitar los agujeros negros de esas grandes áreas blancas de la imagen. Entonces, básicamente, quiero suavizar mi marco umbral. Y para ello, es necesario utilizar el método retardado de CV dos biblioteca. Entonces digamos que queremos cambiar la trama umbral, CV dos, DLD, Una vez más, quieres pasar una trama umbral ahí Ahora bien, si tienes una matriz de kernel y quieres que este proceso sea muy sofisticado, pasarías esa matriz aquí. No tenemos ninguno y no necesitamos uno, así que necesitas pasar ninguno para este parámetro. Y aquí hay otro parámetro más, las iteraciones. Digamos dos. Entonces esto define cuántas veces quieres pasar por la imagen para quitar las suelas. Entonces, cuanto mayor sea este número, más suave será la imagen. Bien. Déjame comprobarlo rápido. Oh, sí, cambié el nombre antes, pero no lo cambié aquí en el método Soy Shaw. Marco fresco. Bien. Por lo que probablemente puedas notar que las áreas, las áreas blancas son más suaves ahora. Entonces, si me voy, solo notarás algunas áreas que están ahí por mi sombra. Entonces, parece estar funcionando hasta el momento. Vamos a crearlo ahora. Genial. Entonces tenemos estos tres marcos. ¿Cuál es el siguiente? Bueno, lo siguiente es que necesitamos encontrar los contornos o este marco de umbral dilatado En cuanto a la detección de contornos con OpenCV, tiene dos métodos Entonces tienes un método de encontrar contornos y un método de dibujar contornos. Y con el método de encontrar contornos, lo que haces es encontrar los contornos en tu imagen y los almacenas en una tupla Por otro lado, el método dibujar contornos dibuja contornos en una imagen. Entonces en este caso, lo que queremos hacer es querer encontrar los contornos, y luego queremos verificar el área de los contornos. Entonces digamos que tienes un contorno como un círculo, y así quieres encontrar el área que este contorno define. Entonces quieres guardar esos contores en una tupla. Entonces quieres escribir CNTs C y otro guión bajo. Bien. Eso sería igual a. CV dos, encuentra contornos. Y luego quieres pasar el marco que quieres encontrar los contornos. Y es bueno usar realmente una copia del marco, así que no quieres modificar el marco umbral. Así que usa copy aquí. Aunque entonces este es el primer parámetro, el marco desde el que desea encontrar los contornos y luego tiene el método recuperar. Externo. Entonces quieres dibujar los contras externos o los objetos que vas a encontrar en la imagen. Y tienes otra cadena de argumentos más, símbolo prox. Entonces este es el método de aproximación que OpenCV aplicará para recuperar Genial. Entonces lo que tenemos es que estamos iterando a través del marco actual Entonces lo estamos difuminando y convirtiéndolo a escala de grises y encontramos el marco delta y aplicamos el umbral Entonces la imagen en blanco y negro. Entonces encontramos todos los contornos de los objetos de los distintos objetos en esta imagen. Entonces, si tienes dos áreas continuas blancas en tu imagen, pero son distintas, obtendrás dos contornos. Entonces un contorno para cada una de las áreas. Estos contornos se almacenarán en esta variable CNT. Entonces estamos hablando de la x actual lo que queremos hacer es querer filtrar estos cóndores Entonces queremos comprobar que queremos mantener solo los cóndores que son, digamos que tienen un área que es mayor a 1,000 píxeles Para eso, hay que iterar, digamos, para el contorno en CNT Y si cv contorno area de contorno. Entonces el contorno por el que estamos iterando, si esto es menor 1,000 continuaremos nuevamente al inicio de los cuatro bucles Entonces lo que esto significa es, digamos que Python encontró tres cóndores y pasará por el primero y dirá el área de este conor Por lo que utilizamos el área conor de la biblioteca CB dos. Si el área tiene menos de 1,000 píxeles, vaya al siguiente conter. Así que ve al segundo conor y revisa una y otra y otra vez. De lo contrario, si el área es mayor o igual a 1,000, se ejecutarán las siguientes líneas aquí después del bucle cuatro. Entonces, ¿qué quieres hacer si un contorno es mayor a 1,000 píxeles? Bueno, queremos dibujar el rectángulo que rodea ese contorno al fotograma actual. Así que asegúrate de estar dentro del bucle de cuatro. Entonces seguimos iterando y así estos son los parámetros que definen el rectángulo, eso sería igual a CV rectángulo de enlace de dos puntos o el contorno actual Entonces, si el contorno es igual o mayor que 1,000 píxeles, por lo que si tiene un área igual o mayor que 1,000 píxeles, esto se ejecutará. Entonces estamos creando un rectángulo, y luego queremos dibujar ese rectángulo a nuestro marco a nuestro marco actual. Así CV dos rectángulo. Entonces ya consumimos este método en nuestras conferencias de detección de fase. Y aquí nos gustaría pasar el marco de color. Bien. Entonces ese es el marco, y quieres especificar X e Y. Entonces estas son las coordenadas de la esquina superior izquierda del rectángulo, X Y, y también quieres especificar las coordenadas de la esquina inferior derecha las coordenadas de la esquina inferior derecha del rectángulo. Entonces X W así como así. Y también el color de tu rectángulo, veamos. Verde y ancho. Digamos tres. Entonces lo que hicimos en estas dos líneas es que creamos esta tupla con estas cuatro coordenadas Y estos valores, esto se asignará automáticamente. Entonces X e Y obtendrán el valor del rectángulo uniendo este control de corriente de los cuatro bucles. Y entonces estos valores serán utilizados para dibujar rectángulo en el fotograma en el fotograma actual. Y luego queremos mostrar ese fotograma actual. Entonces déjame agregarlo aquí. Espectáculo de imagen. Llamemos a esta llamada el marco y el marco. En realidad, este método aquí es la vinculación, correcto. Bien, déjame probar el guión ahora. Un CV dos no tiene contornos de búsqueda de atributos. Entonces aquí tengo una U ahí que no debería estar ahí. Vamos a intentarlo de nuevo. Sí, eso es gracioso. Tiendo a escribir mal esta palabra área de contorno. Línea 24, retire la U. Y debe ser contorno aquí también. Bien. El contorno no se vuelve a definir. Tengo otro aquí. Así que tengan un buen pie conmigo. Inténtalo de nuevo. Uh, si, esta vez parece estar funcionando. Entonces no hay objetos. Objetos. No hay objetos. Objetos. Genial. Genial. Entonces eso es lo que quería enseñarles en esta conferencia, y continuaremos con las próximas conferencias porque lo que hemos hecho hasta ahora es que podemos detectar ese objeto y podemos dibujar un rectángulo alrededor de ese objeto. Pero esto no es muy práctico. Quiero decir, en el mundo real, no basta con dibujar un rectángulo alrededor de tu objeto, y entonces eso es todo. Entonces lo que vamos a hacer en la siguiente conferencia es que vamos a estar almacenando las veces que el objeto entra en el fotograma cuando el objeto sale del marco. Así que tenemos algunas líneas más para agregar a este código. Y sé que este código aquí era bastante para consumir, pero espero que estos estén claros ahora. Si tienes alguna duda, no dudes en hacerlas, y te veré en la próxima conferencia. 123. Almacenar marcas de tiempo de detección de objetos en un archivo CSV ++: Bien, así que tengo mi programa de detección de movimiento redondeando aquí Y como ves, esto me está capturando moviéndome en este momento. Si me alejo, ahí sólo se pueden ver algunas sombras. Y entonces, bueno, esto es genial, pero como dije, tal vez quieras almacenar los tiempos en los que un objeto entra en el marco para que termines con algo así. Entonces esta es la primera entrada. Como hora de inicio, aquí es donde el objeto salió del marco y luego la segunda entrada del objeto y así sucesivamente Entonces en esta conferencia, te voy a mostrar cómo construir esa tabla usando este script. Entonces agregaremos un poco más de código aquí. Y la manera de empezar a hacer esto es primero averiguar el punto, la línea en el guión donde el estado está cambiando de, digamos, movimiento a no movimiento. Así que aquí no tenemos movimiento. Entonces, en cuanto la webcam se activa, digamos, el estado es cero. Entonces solo un símbolo que estoy eligiendo para denotar que no hay movimiento en el fotograma actual Entonces entonces obtienes ese primer fotograma, que tiene un estado de cero, y luego calificas, y luego verificas si el primer fotograma es ninguno, y luego continúas el bucle nuevamente, y luego agarras el segundo fotograma. Entonces el estado sigue siendo cero, entonces aplicas la diferencia, el umbral, se dilatan Y luego erate a través de contornos. Entonces, si encuentras un área que es menor de lo que cambié esto antes, pongo 10 mil. Así que quería detectar objetos más grandes porque estaba más cerca de la cámara, así que quería ajustarla. Entonces, dependiendo de qué objetos quieras capturar, quieres ajustar estos píxeles aquí. Entonces 10,000 es algo así como ventana de 100 por 100 píxeles. Entonces estamos comprobando si no encuentras una ventana que sea mayor a 10,000, luego continúas por el inicio del bucle hasta encontrar un control con este tamaño más grande que este. Cuando Python encuentra ese contro con ese tamaño, queremos cambiar el estado a uno Bien. Y ahora vamos a imprimir esa variable de estado. Entonces lo que quieres hacer es imprimirlo al final de tu bucle así que el estado. Y permítanme borrar estas matrices numpy, que se están imprimiendo No los necesitamos y hacer algo de espacio aquí. Entonces esto está dentro del bucle, y ahora espero ver el estado de uno o cero impreso dependiendo de si hay un objeto en el marco o no. Entonces, si esto está funcionando, eso significa que ahora tenemos el estado real del marco, y podemos usar ese 10 para otras cosas. Entonces veamos. Bien, no hay nada por el momento. Déjame minimizar esto para que podamos ver la consola, esto también. Genial. Entonces se está imprimiendo cero, y si aparece algo, ahora ves uno. Nuevamente, uno, cero, uno, uno, cero. Genial. Ahora podemos simplemente aplicar un método de fecha y hora, ya sabes, como la fecha y la hora lo hace ahora. Y eso registraría el tiempo de cada fotograma. Entonces no queremos eso exactamente. Queremos usar el método day do now, pero no así porque eso registraría tiempos para cada fotograma. Entonces lo que queremos en cambio es querer saber cuándo cambia el estado 0-1, lo que indica que hay un objeto entrando en el marco Entonces queremos grabar ese tiempo. Y también queremos grabar la otra vez cuando el estado cambia 1-0, así el objeto sale del marco. Digamos lista de estado, eso sería igual a corchetes vacíos, una lista vacía. Y luego quiero anexar el estado del objeto a esa lista Entonces después de que termine este bucle, que está aquí, así que quiero estar aquí al mismo nivel con el loop, así que quiero aplicar algo fuera del loop. Entonces lista de estado, quiero anexar el estado actual de la lista aquí en esta lista de estado Genial. Y para ilustrar, para mostrarles de qué se trata esta lista de estatus, me gustaría imprimirla, en realidad. Y me gustaría imprimir una lista fuera del bucle de cable, así que no quiero imprimir cada vez que el bucle itera. Entonces movimiento aquí. Y dejar de fumar. Entonces estos son los estados para cada uno de los marcos. Entonces cero, cero, cero, no movimiento, y luego algo entró en el marco. Y ese algo entró, como, digamos, 30 fotogramas, y luego el objeto sale del marco. Y eso es todo. Entonces, lo que queremos hacer ahora es que queremos capturar lo que sigue. Entonces lo siguiente es que queremos capturar el tiempo que cambiamos 0-1 y también 1-0 Entonces, básicamente, lo que nos interesa es capturar los dos últimos elementos de la lista de estados. Entonces digamos que tenemos estatus cero. Entonces comenzamos con lista vacía, y el primer ítem que se agregará a la lista de estado es cero. Y luego el segundo ítem, digamos será cero o digamos que será uno. Y así queremos aplicar condicional para comprobar si los dos últimos ítems de la lista están cambiando. Entonces sé que esto puede ser confuso, pero una vez que escriba estas cuatro líneas de código aquí, lo entenderán, y tendrá mucho sentido. Entonces queremos verificar si lista de estado. Entonces el último ítem de la lista de estados, que tiene un índice de menos uno, recuerde, indexación de listas, si eso es igual a uno, y lista de estado con índice de menos dos Entonces el ítem que se agregó primero, el ítem que se agregó en segundo lugar es igual a cero. Queremos grabar el día de este evento en una lista. Así que vamos a crear una lista aquí, digamos veces es igual a vacío. Y luego vamos aquí, aquí, y decimos tiempos apéndices, diurno, punto ahora, ya sabes de esta función Entonces queremos anexar la marca de tiempo actual cuando se produjo este cambio Entonces eso significa que necesitamos importar o desde la fecha, hora, fecha de importación y hora. Así que clase diurna de la biblioteca datetime. Así que básicamente estamos grabando el momento en que el estado cambió a uno. Y también queremos registrar el momento en que el estado cambia 1-0. Entonces tendríamos un condicional similar, pero esto sería cero, y este sería uno. Bien. Entonces lo que está pasando aquí es, volvamos al inicio del bucle. Entonces Python capturó el primer fotograma, y lo convierte a gris y lo difumina y aplica allí un desenfoque gaussiano al Y luego almacenamos el primer fotograma en la primera variable de fotograma, y luego seguimos adelante y calculamos la diferencia entre el primer fotograma y el fotograma actual, encontramos contornos, y luego si este bajo encuentra contornos mayores a 10,000, la variable de estado cambia de cero, entonces comenzó en cero, entonces cambia en uno aquí. Y eso significa que esta lista de estado vacía obtendrá otro valor. Pero el primer valor siempre es cero, por lo que la lista comenzará con cero. Ya sabes, como aquí. Entonces el primer valor es cero. Y así digamos para los próximos diez fotogramas, será cero, cero, cero, cero, y así sucesivamente. Y luego si un objeto entra en el marco, y entonces el estado cambia a uno. Entonces tendremos cero, cero, cero, cero, y luego uno. Y entonces lo que estamos haciendo aquí es que estamos comparando los dos últimos ítems de la lista. Bien. Y aquí, me gustaría imprimir la lista de tiempos para que veas lo que está pasando. Y espero obtener un error en la primera ejecución aquí porque tenemos algo más que hacer, pero veamos. Entonces, sí, dice que el índice de lista está fuera de rango. Entonces eso significa que Python está teniendo problemas para acceder al segundo elemento de la lista porque la lista no tiene elementos aquí, por lo que no tiene elementos. Y luego agregamos un ítem, entonces agregamos status. Y luego Python intenta encontrar el segundo ítem, pero no hay un segundo ítem. Entonces tenemos que hacer un truco aquí. Tenemos que agregar dos ítems. Bien. Digamos que ninguno y ninguno. Ahora, volvamos a ejecutar el guión. Entonces no hay ningún objeto ahí por el momento. Ahora aparece un objeto, vuelve a salir dos veces y una vez más. Entonces tres entradas. Y lo dejé. Entonces déjame repasar esta lista ahora. Esta es nuestra lista de tiempos. Y entonces este es el momento. Entonces aquí, el mes, el día, y cómo minutos y segundos, y luego microsegundos aquí dentro Entonces esta es la hora de inicio cuando un objeto ingresó al fotograma por primera vez. Y entonces este es un momento en el que el objeto sale del marco. Entonces me quedé ahí por 2 segundos, así que 51 hasta 53. El siguiente objeto entra en el marco. Entonces de este segundo a este, así por otros dos segundos, y luego otra tercera vez 0-1 por 1 segundo Entonces tenemos tres entradas en el marco. Entonces espero que eso tenga sentido. Esto es bueno, pero a veces puede suceder que cuando estás ejecutando el script, entonces tienes fondo, luego el objeto se muestra, y el objeto desaparece, vuelve a aparecer. Y entonces si dejas el programa en este momento, entonces déjame dejarlo. Verás que tienes una hora de inicio aquí para la primera entrada, luego la hora de finalización, y luego tienes otra hora de inicio aquí para la segunda entrada. Pero entonces no tienes la hora de salida. Por lo tanto, es posible que desee agregar la hora de finalización de la salida de su último objeto, que pasa a ser cuando se cierra la ventana. Entonces quieres ir aquí al final, y el guión está esperando una clave. Entonces, si presionas salir aquí, el bucle while se romperá. Pero antes de eso, es posible que desee verificar el estado. Entonces, si el status es uno, y en ese caso, terminarías con este escenario aquí. Entonces, si el estado es uno, cuando presionas la tecla desde el teclado, quieres agregar otro elemento a tu lista de tiempos. Entonces tiempos anexados diurno eso es ahora, genial. Entonces eso debería funcionar de manera diferente ahora. Así que vamos a ejecutar el script. No hay objeto. Objeto. Ningún objeto, objeto en el marco, salir. Y ahora deberíamos tener cuatro horas de día aquí. Cuatro veces, uno, dos, tres y cuatro. Entonces esto de aquí se registró en esta expresión aquí. Genial. Y lo siguiente que queremos hacer ahora es arrojar esta lista a un marco de datos de pandas y luego a un fol CSV Entonces tendremos una columna de inicio y una de fin. Y en la columna de inicio, tendríamos, por ejemplo, este valor, y en la columna final, tendríamos los otros valores. Entonces este de aquí y el último. Bien. Entonces, antes que nada, necesitamos un marco de datos vacío, un marco de datos pandas Así que vamos a estar usando pandas para crear marcos de datos, por supuesto Entonces déjame importar pandas aquí. Y digamos que el marco de datos DF equivale a pandas DataFrame con columnas de inicio y fin tan fácil como Entonces eso creará una estructura de marco de datos para nosotros, que no tiene valores, pero tiene dos columnas. Y entonces lo siguiente que quieres hacer es fuera del bucle. Entonces, una vez que haya creado una vez que haya generado su lista de tiempos, desea iterar a través de esa lista y luego agregar esos valores en el marco de datos de pandas Entonces necesitas un bucle, digamos, para yo en rango. Y así aquí tendrías que iterar con un paso de dos. Y querrás iterar tantas veces como haya valores en la lista Entonces empiezas de cero y luego terminarías en cuántos valores tienes en la lista? Bueno, puedes encontrar eso usando el método length, así que length times con un paso de dos. Genial. Entonces eso será para cada iteración, marco de datos sólido DF será igual a sí mismo Punto anexar. Entonces estás actualizando el marco de datos, y aquí necesitas pasar un diccionario. Entonces, para la columna de inicio, querrás ingresar tiempos I y para la columna final. Entonces las claves del diccionario aquí son inicio y fin, y querrás agregar veces I más uno Y se quiere ignorar el índice. Tan igual a t. genial. Entonces lo que esto está haciendo es, digamos, porque yo en rango, esto sería, digamos que tenemos una lista con seis ítems. Entonces tenemos tres tiempos estelares y tres veces. Entonces eso significaría rango de cero a seis con un paso de dos. Entonces para cero, haríamos esto. Entonces comenzaremos desde cero en el bucle, y accederíamos al ítem con un índice cero en tiempos, que pasa a ser este ítem, por ejemplo. Entonces el primer ítem. Y luego agregamos ese ítem a la primera fila de la columna de inicio Y luego accedemos al ítem cero más uno, que pasa a ser item con Index one, que debería ser este ítem, entonces el segundo ítem. Y agregamos ese ítem a la columna final para la misma fila Entonces eso es todo. Después pasamos al siguiente punto. Entonces esta vez, empezaríamos con el índice tres, y así tres aquí, lo agregamos a la columna de inicio y luego cuatro lo agregaríamos a la columna de inicio a la columna final, lo siento y así sucesivamente. Y por último, tendríamos un marco de datos. Y lo que quizás quieras hacer entonces es DF dos CSV. Digamos tiempos CSV. Entonces estamos exportando el marco de datos a un archivo CSV. Genial. Entonces veamos cómo va a ir esto. Aquí se está poniendo bastante oscuro. Bien. Y una vez más. Encuadre, salga. Y como ves, veces se creó el CSV en mi sistema de archivos. Y así estos son los tiempos. También puedo abrirlo usando Excel. Entonces estos son los tiempos de inicio y fin. Si quieres, puedes formatear las celdas de formato aquí, y ya puedes ver las fechas. Genial. Genial. Entonces eso termina esta conferencia, y espero que la hayan disfrutado. Tenemos un guión bastante bueno ahora, y para hacerlo más bonito, nos gustaría mostrar estos tiempos en una gráfica. Entonces así es como conviertes tus datos en información real. Y eso lo haremos a través de las próximas conferencias. Pero antes me gustaría presentarles la biblioteca Bouquet, que es una biblioteca para visualizaciones interactivas en el navegador Entonces, por favor, siga las conferencias en el orden correcto, y estoy seguro que aprenderá mucho. Hablarte más tarde. 124. Introducción a la biblioteca Bokeh +: Hola, y bienvenidos a esta nueva y muy emocionante sección por supuesto. Y en esta sección, por lo que lo largo de las conferencias de esta sección, estarás aprendiendo a generar visualizaciones en el navegador con Python Entonces estamos hablando de visualizaciones interactivas, y vamos a estar usando la biblioteca Bouquet Python para hacer eso Entonces Boke es una biblioteca Python, y es bastante nueva. Y con Bouque puedes obtener datos de diversas fuentes de datos, formatos de archivo de datos como CSV, lista de Python, archivos JSON, etc. Y puedes crear hermosas visualizaciones en el navegador Solía ser usuario de Math Plus Lib y Seaborn. Así que otras dos bibliotecas Python que se utilizan para realizar visualizaciones con Python Pero yo diría, Boke es más moderno. Y una vez que te lo presente, estoy seguro que lo estarás usando para tus proyectos de visualización de datos. Entonces, en esta sección, te mostraré cómo crear gráficos de líneas y diagramas de dispersión y también cómo combinar varios gráficos en un gráfico y gráficos de series de tiempo también. Y estaremos escribiendo el código en el cuaderno de Júpiter, antes conocido como el cuaderno IPython Y el cuaderno Júpiter es como una combinación de consola Python, así que escribes código interactivo, pero también puedes guardar el script que escribes El cuaderno de Júpiter se ve algo así. Bien. Y te voy a mostrar cómo instalar el cuaderno Júpiter en la próxima conferencia Y así Júpiter es genial para hacer análisis de datos y visualizaciones y desguace web y otros Así que estoy seguro que te va a encantar. Y aquí, pasemos a la siguiente conferencia. 125. Cómo crear tu primera trama bokeh: Genial. Ahora ya sabes lo que es boke porque lo expliqué en la conferencia anterior En esta conferencia, te voy a mostrar cómo construir una gráfica de libros muy básica. Sí, así que vamos a empezar de cero y paso a paso, vamos a mejorar esa gráfica. Sí, digamos que este es tu primer gráfico de libro o tal vez has construido gráficos de libros antes. Entonces antes de tomar este curso, sabes, algunas cosas ya. Aún así, te sugiero que comiences desde aquí porque te voy a mostrar la lógica correcta hacia la construcción de gráficas paso a paso. Ah, sigamos adelante y hagamos esto. Mm. Voy a estar usando a veces voy a estar usando el cuaderno de Júpiter para escribir código Python, y en otras ocasiones, estaré usando el editor Atom Entonces el cuaderno de Júpiter es un buen lugar para comenzar, en realidad, porque nos permitirá escribir algún código interactivo Podemos simplemente escribir una sola línea de código y ver qué hace. Así que eso es genial para comenzar con una biblioteca para que puedas explorar la biblioteca probando pequeñas piezas de código. Y con shift y click derecho sobre Windows sobre carpeta, puedes ir por aquí y abrir la ventana de comandos aquí, y esto abrirá un símbolo del sistema en la carpeta actual. Entonces en un Macro Linux, tal vez puedas hacer algo como abrir terminal aquí o puedes abrir un terminal normalmente, y luego puedes CD a la ruta a tu ruta de trabajo. Entonces estaré escribiendo el código en este directorio. Y para instalar Júpiter, dirías PIP instalar Jupiter Y este es un requisito ya satisfecho porque ya instalé Jupiter Notebook Si no lo has hecho, puedes simplemente seguir adelante y hacer esto, y, ya sabes, se instalará para ti. Y para iniciar Cuaderno Júpiter, dirías Cuaderno Júpiter, así como así Y eso abrirá un Cuaderno de Júpiter en Host Local. Entonces es como un portátil basado en servicios. Y si, si creas ahora, creas un cuaderno gratuito de Python. Y nombra. Gráfica básica así como esa. Y en la carpeta demo tendrás este punto gráfico básico IPYNB, que significa cuaderno IPython, pero ahora el cuaderno IPython pasa a llamarse Cuaderno Jupiter Pero la extensión sigue siendo la misma. Y también tienes estos puntos de control, que son archivos que se reducen automáticamente cuando Júpiter guarda tus sesiones Ahora deberías mantener tu frente de comando abierto, y entonces aquí es donde escribes el código. Ya sabes, si no prefieres usar libros de Júpiter, puedes usar tu editor favorito Entonces ese sería Atom o Vim o el IDE de Python predeterminado, y así sucesivamente No importa mucho. Y voy a estar usando comentarios para comentar mi código, y eso te ayudará a leer y entender mi código más fácilmente porque, ya sabes, estaré escribiendo algo de código aquí y algo de código y más tarde así. Y voy a estar explicando el código a medida que lo escriba. Pero a veces olvidas lo que escribí aquí y estás luchando por entenderlo, pero si tengo algunos comandos aquí, digamos, trazando los valores X e Y. Y si escribo este comentario aquí, Python no lo leerá como código, por lo que lo ignorará, pero puedes leerlo y asumirás que estoy escribiendo este comentario para el siguiente bloque. Entonces escribo el comando, no dejo espacio y ahí escribo el código. Y luego dejo un espacio ahí y escribo algún otro código ahí. Entonces es otro bloque que no tiene que ver con este comando. Entonces este comentario será sobre este bloque de código ahí. A veces puede que quiera aplicar comentarios específicos sobre líneas específicas. Por ejemplo, este de aquí. En ese caso, voy a escribir el comando justo ahí. Entonces digamos para los valores X aquí o algo así. Genial. Y el primer comentario suele ser sobre el guión. Entonces lo que vamos a hacer es hacer una gráfica básica de boe. Este será un gráfico de líneas. Genial. Y voy a dejar un espacio ahí, y aquí empiezo el código. Entonces antes que nada, estaré importando Boke voy a estar explicando esto más adelante, pero bouquet tiene algunas interfaces Y la primera interfaz es el trazado de ramo. Entonces se llama la interfaz de trazado Bouquet. Y voy a estar pasando por las interfaces más tarde. Entonces, por ahora, centrémonos en cómo se ve un gráfico y cómo se ve el código para construir un gráfico de mocos Entonces desde Bouquet plotting import importas el objeto figura, que es el objeto más importante en Bouquet porque este contendrá como un contenedor donde agregas puntos, agregas líneas, y tenías etiquetas para los puntos, y tenías calificaciones para la trama, leyendas y todo Entonces agregarás todo a este objeto de figura. Eso es. Y luego necesitas tener algunas herramientas útiles de Bokeh que provienen de la interfaz booke dot IO Entonces a partir de eso, quieres importar archivo de salida y mostrar. Sí, eso es básicamente lo que necesitamos. Verás lo que son todos estos en solo un poco, y luego necesitamos crear algunos datos. Así que vamos a crear algunos datos falsos ahí. Preparar algunos datos. Voy a estar usando listas. Digamos, uno, dos, tres, cuatro y cinco. Entonces eso es para el eje X. Entonces en la gráfica, estos valores serán mapeados a lo largo del eje X. Y luego tenemos ahí el eje Y. Digamos, seis, siete, ocho, nueve, diez. Tenga en cuenta que estas listas tienen que tener la misma longitud, para poder trazarlas en Bukit De lo contrario, Bouquet lanzará un error. Voy a decir que ya sabes, Bouquet empezará a tomar pares de esta lista. Por lo que tomará uno y seis, y mapeará estos a lo largo del eje X y el eje Y. Entonces creará un punto con las coordenadas uno y seis, y luego dos y siete, y así sucesivamente. Paso por cinco y diez. Entonces si agregas un número de línea aquí, digamos, siete o lo que sea, Python dirá , Oh, no encontré un par para siete en el eje Y. Entonces obtienes un error. Genial. Entonces tenemos los datos. Preparar el archivo de salida. Entonces aquí es donde usas la función de archivo de salida. Y ahí se pasa el nombre del archivo HML que se creará Para que puedas elegir cada nombre que quieras. Y entonces lo siguiente que hay que hacer es crear una instancia de objeto de figura. Ahí tienes la clase de figura. Lo has ingresado y puedes usarlo ahora, así como así Estoy almacenando eso en la variable F. Déjame comentar esto. Crear objeto de figura. Y luego finalmente, crear trama de líneas. Y la forma de crear el trazado de líneas es haciendo referencia al objeto de figura que creaste, y luego aplicas el método line si quieres crear una línea. Y la línea espera de usted pasar la matriz X con los datos y la matriz Y también. Entonces sé que todo lo que estoy pasando aquí son los requisitos mínimos para construir una parcela. Pero hay muchas características que agregarás más adelante aquí en el código para que enriquezcamos nuestras parcelas con características como leyendas y etiquetas y colores y transparencia, etcétera Pero esta es la columna vertebral, por así decirlo. Y una vez que hayas creado una línea, todo lo que te queda por hacer es usar el método show para mostrar tu objeto de figura. Y para ejecutar eso en Júpiter, solo puedes presionar Control y Entrar Espera un segundo. Y ahí tengo un error. Oh, ponlo debería ser archivo de salida. Lo siento. Ejecute de nuevo, y aquí está el gráfico de líneas. De todos modos, si miras esto, ves que el primer punto de la línea está en las coordenadas uno Entonces este es el eje X, uno para el X seis para el Y. Si miras aquí hay uno y seis, y entonces tienes dos y siete y así uno hasta el último punto, que es de cinco a diez. Cinco y diez. Sí. Entonces esa es una gráfica. Y esto no es un gráfico de imagen. Como pueden ver, puedo mover esto y ustedes también tienen un par de herramientas aquí. Entonces estas se llaman herramientas. Y lo que puedes hacer con esto es, digamos, esto es un bolígrafo, y ves aquí esta línea azul vertical, eso significa que la herramienta Pluma ya está activada. Y si muevo mi cursor así, voy a escribir alrededor de la gráfica. Si haces clic, digamos, en el Zoom de Rueda, verás que tanto Pan como el Zoom de rueda están activados ahora, y puedo usar la rueda de mi mouse para acercar y alejar. Ahora recuerda que te lo dije, bouquet produce gráficas interactivas. Entonces aquí está. No obstante, esto es solo una funcionalidad básica de interactividad porque más adelante, como ya les dije antes, estaré agregando widgets aquí que interactúan muy poderosamente con De todas formas, básicamente, también tienes esta caja Zoom que puedes acercar en cierta área de tu gráfica. También tienes este reset a allí, que en realidad restablece la gráfica a su vista predeterminada Y lo que queda, tenemos este botón de ayuda, que te lleva a la documentación de Bouquet, y luego revisaré la documentación de Bouquet, lo cual es muy útil para que obtengas ayuda. Y también es un botón seguro aquí que puedes usar para guardar tus parcelas en gráficos PNG, imágenes. Entonces, si alguna vez quieres convertir tu gráfica en imágenes, puedes usar ese botón. Y a, eso se trata de construir una gráfica básica, y me gustaría darte alguna actividad de práctica, ya sabes. Ya sabes, aquí usé un gráfico de líneas, pero puedes usar otro tipo de glifos Así es como se llaman estas geometrías en Boha y puedes hacerte una idea de qué glifos puedes usar, puedes aplicar a tu figura haciendo D y F, que es la instancia de objeto de tu objeto de Verás aquí, busquemos línea. Aquí está la línea. Entonces ese es el que usaste. Pero me gustaría pedirte que hagas tus propias gráficas usando triángulo primero círculo Alana Entonces, eso sería muy fácil. En lugar de línea, solo pasa estas cosas aquí y mira lo que obtienes. Pero trata de hacer la gráfica desde cero en lugar de copiar la mía. Y permítanme comentar esto. Olvidé comentar. También puedes jugar con algunos otros datos para ver cómo va eso. Y sí, eso asegurará que entiendas cómo crear una trama de ramo muy básica. Y en la próxima conferencia, te mostraré cómo usar algunos datos más reales. Entonces usamos está aquí, pero en la próxima conferencia, usaremos archivos CSV. Así que trazando desde un archivo CSV, estaremos creando la misma gráfica. Nos vemos ahí. 126. Cómo usar Bokeh con pandas +: Bueno. Pudimos crear un gráfico de líneas usando este código, y espero que hayas jugado un poco con este código y te hayas familiarizado con él. Ahora bien, ve aquí que tenemos dos listas como salida. En esta conferencia, te enseñaré a usar archivos CSV para alimentar tus gráficos de boket Y voy a usar este código como referencia. Así que sólo voy a, ya sabes, necesitas presionar Escape. Cuando presionas Escape, puedes aplicar atajos de teclado a tus celdas. Y puedes ver una lista de atajos aquí atajos de teclado. Y por ejemplo, lo que quiero hacer ahora es que quiero copiar una celda con C, y luego quiero pegar quiero pegar esa celda de abajo con V. Pero antes que nada, necesitas estar en modo comando. Entonces, para entrar en modo de comando, es necesario presionar Escape, como dice el script de ayuda. Y sí, asegúrate de escapar y luego C y luego, y tendrás otra celda aquí. Además, en realidad me gustaría eliminar este encabezado aquí e ir a ver, Togle header y luego TogletolBR también Entonces tengo más espacio para ti aquí. Entonces este es el código con el que estaré trabajando. Entra, y si, voy a estar trabajando en este código por ahora. Y déjame ir aquí. Este es directorio de trabajo. Yo sólo voy a seguir adelante y crear un archivo CSV. Digamos punto punto punto CSV. Sí, y sólo voy a editarlo con Nopats. Puedes usar Excel si quieres. Entonces sólo voy a tener dos columnas aquí. Ese es el cabezazo, y luego uno para X, seis, para Y, dos y siete y tres y ocho, y cuatro y nueve, y uno más, diez. Guarde eso. Ciérralo. Así que tenga en cuenta que los datos punto CSV está en el mismo directorio con gráfico básico punto IPYNB y vaya a su script Ahora, aquí estamos importando Boca, pero yo también estaré importando paneles. Así que vamos a mencionar esto aquí y a los pandas. Déjame usar B minúscula e importar pandas. Sí, prepara algunos datos. Hmm. Entonces, supongo que conoces a los pandas Entonces, básicamente, el marco de datos es el objeto principal, y se quiere crear un marco de datos a partir de CSV fall que es data dot CSV, así como así Y luego, vamos a crear dos variables aquí. Por lo que la variable X será igual a DF. Corchetes, la columna X. Así que no confundas la columna X con la variable X. Simplemente pasan a tener el mismo nombre. Bien. Y también la matriz Y, la F. Y? Bien. Sí. Eso debería hacerlo. Déjame cambiarle el nombre a esto. De CSV. Ejecutar. Y obtienes exactamente la misma línea que la que hicimos antes con la lista simple de aquí. Y, ah, así es básicamente como alimentas tus parcelas de corredores de apuestas con las matrices DataFrame de Panda Así que de nuevo, um, solo por el bien de aclarar las cosas, este es el marco de datos Tiene dos columnas, y tienes la columna X entonces. Entonces eso se almacenó. En realidad, esta es la columna índice, esta de aquí. Estos son los datos reales de esa columna. Y también tienes ahí la columna Y. Entonces, eso es todo. Como ves, Bouquet es capaz de leer listas de reproducción, por lo que Pythleis como esta de aquí, y real y también marco de datos o una y real y también marco de datos o Por lo que a esto se le llama un serio. Se puede comprobar eso. Sí, un serio. Y, sí, eso es todo. DD para eliminar una celda. Y sí, vamos a seguir adelante con algunas conferencias más ahí, nos vemos. 127. Crear una trama de series de tiempo +: Todo bien. En esta conferencia, aprendes a hacer gráficas de series de tiempo. Estamos hablando de datos donde uno de los ejes. Normalmente el eje X consiste en fechas u horas. Digamos que tenemos observaciones de temperatura para varias fechas, y vamos a tener que trazar estos valores a lo largo del eje X e Y. Tengo algunos datos bonitos aquí que vamos a tomar de este enlace. Entonces es un archivo CSE. No tienes que descargar el archivo CSV en realidad, porque lo vamos a pasar como un enlace directamente al método CSV. Entonces lo que tenemos aquí es una columna de fecha y algunos otros atributos. Por lo tanto, es posible que desee trazar los datos a lo largo del eje X. Y luego en el eje Y, se quiere mostrar una de estas características. Digamos este atributo, cerrar. Entonces voy a cerrar esto. No necesito este archivo porque usaré un enlace directo y dejaré crear una nueva celda. Así que voy a estar usando, de nuevo, el ramo que trazando interfaz aquí Y también importar pandas. La clave aquí es que vamos a estar usando un marco de datos de pandas, y luego vamos a analizar esta columna de tiempo de datos como fechas para que Python los lea como fechas y de hecho sea capaz de trazarlos en el eje X. Y entonces estaremos usando un glifo de línea para trazar estos datos. Entonces un glifo de línea sería, ya sabes, puedes usar círculos, triángulos, etcétera, pero también puedes Entonces pasarías la línea aquí, pero entonces el tamaño no tiene sentido porque es posible que quieras pasar la línea con para la línea. Así que no tamaño, sino línea con. Y, ya sabes, si ejecutas esto ya no ves círculos, así que ahora no es un diagrama de dispersión, sino que es un gráfico de líneas. Entonces usaremos el mismo concepto para construir este gráfico de tiempo diurno, gráfico de series de tiempo. Entonces, lo primero que quieres hacer es cargar los datos CSV dentro de Python. Así panel leer CSV, y puedes pasar en realidad el enlace este enlace directamente al método CSV. Entonces, ¿qué tan conveniente es eso? Y luego quieres pasar el parámetro de fechas de análisis año, y quieres especificar el nombre de la columna donde están estas fechas. Y el nombre de esa columna era fecha. Entonces, si recuerdas del archivo CSV que abrí antes, esa era la fecha. Y así, una vez que cargues el objeto de marco de datos, quieres crear un objeto de figura. Digamos que el ancho es igual a 500 y pelea. Digamos 500 por ahora, entonces comprobamos cómo va, y podemos cambiarlo después. Entonces tenemos el parámetro de tipo eje X aquí. Entonces, lo que esto debería hacer es que quieres que tu eje, tu eje X sea espacial para que pueda leer los tipos de datos de fecha y hora. Y así para declarar que tienes daytis, necesitas pasar una discusión diurna como una cadena ahí Entonces eso es todo. Y entonces lo que quieres hacer es aplicar el objeto de línea ahí dentro. Tan similar a esto ahora, es necesario pasar el eje X y el eje Y. Entonces el eje X aquí debería ser fecha DF. Y el otro eje es, digamos cerrar, entonces la columna cerrada. Y hagamos la línea naranja. ¿Y qué más? Tal vez una transparencia de 0.5. Y especifica dónde quieres guardar esto. Entonces, bajo qué nombre HTML Series Time series dot HTML. Y por último, mostrar la trama. Y vamos a ver. Y algo no está funcionando, así que Python no está siendo capaz de sacar los datos ahí. Oh, necesito pasar los datos aquí como una lista en realidad. Entonces sí, se ve mejor, pero también se ve un poco exprimido. Entonces lo que puedes hacer aquí es que puedes cambiar esto a, digamos, 250 y ahí obtendrás una mejor gráfica. Ahora bien, si quieres extenderlo a toda la página, ahí hay algo que puedes hacer. De hecho, puedes pasar el responsive y establecerlo verdadero. Bueno, vamos a ver. Entonces ahí se obtiene una gráfica más grande. Y claro, puedes acercar el zoom para ver algunos detalles ahí. Entonces para el 8 de mayo, tienes un valor de una indidad. Entiendes la idea. Entonces con eso concluye esta conferencia, y los veré en la siguiente. 128. Más ejemplos de visualización con Bokeh: Bien, vamos a resumirlo ahora. Entonces pudimos generar gráficas, y ustedes vieron que hasta la ley generamos gráficas únicas. Entonces, por ejemplo, aquí, verás un gráfico de líneas. Ahora bien, si quieres combinar múltiples glifos en una parcela, eso sería muy sencillo Entonces digamos que tienes dos parcelas. Allí agregarás una gráfica de dispersión. Entonces necesitarás agregar un glifo circular. Entonces justo debajo de esta línea glifo o por encima eso no importa Entonces círculos con estas coordenadas o podemos cambiarlas. Entonces vamos a duplicar el eje X. Ocho veces dos para mí en esta lista, que cierra aquí. Y entonces este debería ser el tamaño, digamos ocho y olivo. Entonces así es como se obtienen múltiples glifos en una parcela. Eso fue muy fácil. Y entonces creo que te doy una buena introducción a la biblioteca Bouquet. Y creo que ves su potencial, así que es genial usar Bouquet para generar visualizaciones Ahora bien, si quieres profundizar en el ramo, así que quizás quieras tener que trazar diferentes tipos de gráficas, primero señalarte este recurso. Entonces esta es la documentación, la documentación del ramo. Y se trata de trazar con glifos. Entonces lo que tienes aquí son varios ejemplos. Usamos esta en realidad y otras también, líneas. Y también se pueden trazar parches. Entonces básicamente, pasas las coordenadas de cada uno de los puntos del polígono aquí y bouquet dibujará el polígono Entonces estas son las cosas básicas. Y aquí me gustaría detenerme un poco. Entonces a esto se le llama trama cuadrática, en realidad, esta de aquí Entonces, en lugar de pasar un círculo de línea, pasarás un quad. Y en lo que consiste esto es en la cima. Entonces el borde superior de tu cuadrante. Entonces, por ejemplo, el primer quadront aquí tiene un borde superior de dos y un inferior de Entonces es frontera con uno y dos. Y entonces una izquierda sería una y derecha, 1.2, entonces una izquierda y 1.2 derecha. Y luego tienes el siguiente cuadrante, que es este de aquí con sus coordenadas también, y así que aquí están los colores para que puedas usar códigos de color CSS si quieres, además de usar cadenas de colores como rojo y naranja y amarillo, y así sucesivamente Entonces, la razón por la que detuve esta trama es que usaremos esta trama para visualizar realmente los tiempos de nuestro programa de video. Entonces, los tiempos en que un objeto entra en el fotograma de video y cuando el objeto sale del fotograma de video. Sería genial si empiezas a pensar en esto ahora cómo vas a hacer uso del archivo CS que generamos en el programa de video antes y trazar ese archivo en una gráfica similar como esta. Ahí hay algunos trucos, y no espero que lo resuelvas completamente, pero es bueno pensarlo. También tienes aquí esta galería, la galería Bouquet. Aquí tenemos algunas parcelas bonitas. Tienes el histograma. Si haces clic en uno de estos, entonces, por ejemplo, voy a hacer este mapa. Así que simplemente puedes copiar este código y pegarlo en tu script y ejecutarlo, y obtendrás el mismo mapa. Eso es lo que quería enseñarte sobre Bouquet, y lo usaremos más tarde, como dije, para visualizar estos tiempos en los que un objeto se mueve en nuestro fotograma de video frente nuestra webcam. Entonces te hablaré más tarde. 129. Dibujo de intervalos de tiempo a partir de los datos generados por la aplicación de cámara web: Hola, y bienvenidos a esta nueva conferencia. Entonces lo que voy a hacer aquí es darle el toque final a nuestro programa de detección de movimiento. Y específicamente, construiré una trama usando la biblioteca Bouquet donde visualizaré las veces que el objeto entra y sale del fotograma, el fotograma de video. Y la salida final se verá algo así. Entonces lo que tenemos aquí es una trama con un eje X. Que es trazar el día, mientras que el eje Y no tiene ningún sentido, en realidad Entonces solo una extensión vertical de las barras que está aquí. Y entonces lo que tenemos aquí es, digamos, que arranqué la cámara esta fecha tan 17 de marzo. Y así esta primera captura aquí es, se puede ver que comenzó en esta fecha y terminó después de 4 segundos. Por lo que este objeto ingresó al fotograma en la fecha de inicio y permaneció 4 segundos ahí y luego salió del fotograma de video Entonces, de manera similar, tenemos este otro objeto. Así que aún el 17 de marzo. Y entonces tenemos a este otro aquí. Y entonces aquí empieza el otro día. Entonces el 18 de marzo, y estas son las horas entre estos días. Entonces 4:00 ocho, 12, 16 y tienda de campaña. Y también se puede ver que he agregado capacidades de hover aquí para que cuando pase el mouse sobre estas barras, obtenga esta información Y también puedes acercar aquí. Entonces, si quieres más información sobre esto, puedes ver la información claramente aquí. Entonces ese es el producto. Ahora bien, lo que está haciendo el script en este momento es que está produciendo la hora de inicio y la hora de finalización del objeto ingresando al fotograma en un archivo CSV. Entonces específicamente, el programa está activando el video desde la webcam Y luego tienes algunos objetos ahí dentro. Presione cue para dejar de fumar. Y entonces lo que obtienes son los tiempos del CSV. Donde cada fila representa la hora de inicio y luego la hora. Bien, ya lo sabes. Y así por el momento, lo que tenemos aquí también es una lista con el estado del marco actual. Entonces esto tiene, digamos, 100 artículos, eso significa que teníamos 100 fotogramas en este video de siete segundos. Ahora bien, lo primero que tal vez quieras hacer es una pequeña mejora aquí muy rápidamente. Esta lista, si estás teniendo una webcam captura un video largo. Entonces, si lo estás ejecutando durante muchas horas, esta lista puede llegar a ser demasiado grande, así que para evitar problemas de memoria, es posible que quieras ir aquí. Entonces aquí estás revisando el último ítem de la lista y el ítem anterior al último ítem. Entonces los dos últimos artículos, eso significa que no necesitamos estos otros artículos. Por lo que solo necesitamos guardar dos artículos perdidos solamente. Eso significa que justo después agregamos el nuevo estado aquí, así decimos que la lista de estado es igual a la lista de estados, pero con solo los dos últimos elementos Entonces, si ejecuto esto ahora, lo que obtendré son solo los dos últimos estados del fotograma de video impreso como una lista Entonces la lista está imprimiendo aquí. Entonces eso es una mejora por el bien de la memoria. Ahora bien, ¿cómo nos movemos construyendo una parcela con ramo? Entonces primero, tenemos que pensar la estructura de nuestros guiones. Entonces este objeto de trazado que vamos a crear usando un cuadrante, por lo que esto esperará que se envíe un marco de datos como entrada Así que en realidad tenemos un marco de datos aquí. Y estamos enviando el marco de datos a los tiempos el archivo CSV. Lo que voy a hacer aquí es crear otro archivo, script Python, digamos trazando punto pi Y aquí es donde escribiré el script, el código para trazar los datos En ese caso, eso significa que necesitamos recuperar el marco de datos de este programa detector de movimiento a este script Entonces lo que puedes hacer es decir desde movimiento, detector, importación DF. De modo que eso pondrá a disposición el marco de datos DF que se está generando en este programa detector de movimiento, lo que significa que cuando quieras ejecutar el programa más tarde, estarás ejecutando el punto pi de plotting con Python Y así cuando ejecutes Plotin punto pi, trazado de punto pi llamará para ejecución de este script de detector de movimiento punto py Entonces arrancará el video de una webcam y luego cuando finalicen estos bucles, se generará este marco de datos. Eso significa que después , se ejecutará el script, el código del punto pi de trazado Entonces aquí vas a estar obteniendo el marco de datos y trazándolo y así sucesivamente Espero que eso quede claro. Así que sigamos adelante ahora e importemos la interfaz de plotting de Boke Entonces, desde BokePloting en realidad no se importará toda la interfaz de trazado Solo necesitamos show de figura y archivo de salida. Vamos a mantenerlo apretado ahí. Y luego sigamos adelante y creamos el objeto figura. Y X es tipo será de tipo fecha hora. Vamos a establecer una altura de 100 y una anchura de 500. Y hagámoslo receptivo. Título de la gráfica gráfica de movimiento. Bien. Entonces una vez que tenemos una figura ahí, queremos trazar un glifo en esa figura Ese glifo, en este caso, sería un cuadrante, entonces quad Entonces un cuadrante sería más apropiado para trazar ahí estos intervalos de tiempo Y así el truco para tener este glifo cuádruple para visualizar tu fecha y tus tiempos a lo largo de estos ejes X es pasar de izquierda a derecha, parámetros inferior y superior Entonces por izquierda, querrías pasar la hora de inicio, así que a la izquierda de la caja de cajas que ves aquí. Entonces el borde izquierdo sería la hora de inicio mientras que el borde derecho. Entonces DF sería la hora de fin. Entonces aquí está nuestro CSV, que no es lo que estamos usando, sino que esta es una estructura de los datos. Entonces comienza la hora a la izquierda, y luego termina el tiempo bordeando la derecha del rectángulo del cuadrante Y entonces aquí hay un truco que podemos hacer para fondo. Nos gustaría mantener un valor fijo. Entonces cero por cada cuadrante, y luego uno por cada cuadrante también Eso es. El color no es un problema. Digamos verde. Y me gustaría probar esto por ahora. Entonces voy a poner archivo. Eso sería gráfico punto HTML. Mostrar la figura de Pi. Y veamos qué va a pasar hasta aquí. Entonces Python, no queremos ejecutar detector de movimiento ahora, pero queremos ejecutar el trazado de ese Pi Entonces ese es nuestro guión principal donde empezamos. Y tengo un estúpido error de sintaxis aquí de Book a plotting figure, apuesto a que lo sabías que me perdí la palabra clave import aquí Así que desde BokePloting import figure show file, guarde e Y aquí está el objeto webca. Objetar otra vez. En otra ocasión. Dejar de fumar. Y veamos qué va a pasar ahora. Y otro error más, sensible. Bueno. Perdón por eso. Inténtalo de nuevo. ¿Primer objeto, y segundo objeto ahí, y uno más? Dejar de fumar. Y deberíamos ver la gráfica. Sí. Sí, se ve bien. Así que puedo ver aquí y también se puede notar que aquí tenemos una granularidad bastante innecesaria Así que aquí no necesitamos todas las pegatinas. Y también, se puede ver aquí que se trata de 19 segundos, lo que significa que son 19 segundos pasado el último minuto. Entonces si fue, digamos, 15 minutos y 19 segundos. Entonces 20 segundos del minuto 15 y así sucesivamente. Entonces realmente no ves el panorama general en tan solo 10 segundos de video, sino también para que sea más informativo, agregaría una herramienta hover a esta barra para que cuando pase el mouse aquí, como saben, deberías ver la hora de inicio y finalización para que puedas ver el tiempo completo ahí si las etiquetas aquí no son suficientes Pero primero, vamos a quitar las pegatinas aquí. Entonces volvemos al guión y dejemos que ponga esto abajo. La forma de hacerlo sería que necesitemos modificar el objeto figure, entonces la variable P. Y así estamos trabajando en el eje Y, entonces Yaxs. Entonces accedemos al objeto del eje Y del objeto figure, luego el color de tick menor, y queremos establecerlo en none. Entonces esto marca aquí. También, se puede ver que también tenemos una grilla. Entonces no queremos aquí estas líneas intermedias, y podemos hacerlo accediendo al objeto grid, que es list, que es list, lo que es necesario acceder al primer ítem de la lista. Entonces ahí hay un buen truco, pero hay que hacer las paces con eso. Entonces ticker decir deseado. Número de garrapatas. Entonces ese es el método y configurarlo en uno. Entonces veamos cómo va a cambiar esta vez la gráfica. Y es una buena idea ponerle otro nombre a la gráfica para que comparemos las dos gráficas. Entonces grafica uno para esto. Y vamos a ver. Aquí. Y dejar de fumar. Y tengo un atributo menor tick color. Tiendo a poner esto erróneamente. Lo bueno es que Bouquet tiene un manejo bastante bueno de errores, por lo que es un color de línea de tick de atributos similares o menor. Así que en realidad es capaz de leer lo que ingresas allí y te sugiere qué introducir tan menor color de línea ti. Entonces tenemos una línea aquí. Así que inténtalo de nuevo. Veamos esta vez, qué vamos a conseguir. Entonces ahora se ve más limpio, como puedes ver. Aquí está nuestra gráfica anterior. Esta es la nueva, así que aquí no tenemos las líneas horizontales de la cuadrícula y las garrapatas. Y pensé en detener esta conferencia en este momento. Y la otra conferencia, te mostraré cómo agregar estas capacidades hover a tu gráfica Entonces hablaré con usted en la próxima conferencia. 130. Implementar una función de desplazamiento: Genial. Tenemos una gráfica que visualiza los intervalos de tiempo cuando el objeto ingresó al fotograma de video Ahora, sigamos adelante y modifiquemos nuestro código para que agreguemos una ventana, una ventana aparecerá aquí cuando el usuario el mouse sobre estos cuadrantes Hagámoslo. Y la herramienta Boke para implementar la funcionalidad Hover se llama la herramienta Hover Y a eso se accede desde la interfaz de nivel inferior llamada models, so boket dot models Entonces quieres importar la herramienta Hover. Veamos ahora cómo vamos a usar esto dentro de nuestro script. Y básicamente, este es un método que espera de ti algunas matrices con datos para que el método de la herramienta Hover los muestre cuando el usuario el mouse sobre estos cuadrantes Entonces, si el cursor está en este cuadrante en particular, digamos, los datos para ese cuadrante se mostrarán en la ventana emergente. Entonces, lo que quieres hacer es una vez que hayas creado tu figura, quieres crear un objeto hover, que será igual a la herramienta Hover Que tiene un parámetro de dos tips ahí, y esto obtendrá como argumento lista de tuplas, y en cada tupla, desea especificar las líneas de la ventana emergente Entonces, digamos que en la primera línea de tu ventana emergente, querrías tener una cadena de inicio, y además de eso, start string, quieres tener la matriz con tus datos. Esto tiene aquí a este decorador espacial. Entonces en nuestro caso, esa sería la columna de inicio desde el marco de datos. Entonces queremos la hora de inicio, y luego la hora también. Entonces para la cadena y y para el nombre de una columna. Entonces eso debería hacerlo casi. Pero necesitamos agregar esta herramienta usando el método at tools. Entonces el objeto hover, necesitamos agregarlo a los menús de herramientas Entonces esto debería ser un punto. Y eso es todo. Y vamos a tener que añadir más aquí, pero veamos qué llegamos hasta aquí. Entonces Python trazando punto py. Aquí hay un objeto, otro, y un tercero y déjalo. Entonces sí, aquí hay una gráfica, y ya casi estamos ahí, pero aún no. Entonces como ves, por alguna razón, Python está teniendo problemas para recuperar los valores de la columna inicio y final Y también se nota que tenemos dos columnas para cada una de estas filas aquí. Entonces lo primero que quieres hacer es eliminar esta columna. No necesitas esto porque Bouquet lo está agregando por defecto. Entonces eso es todo. Y ahora para resolver el otro problema, el principal problema de los signos de interrogación es agregar el método de fuente de datos de columna. Que proviene de la interfaz de bajo nivel de los modelos reservados. Por lo tanto, la fuente de datos de columna es una forma estandarizada de proporcionar datos a una trama de libro. Entonces, si tienes marcos de datos, listas u otros objetos, para algunas funciones en el libro necesitas convertirlas en un objeto fuente de datos de columna. Lo cual en realidad es muy fácil. Y déjame hacerlo aquí. Así que agarramos el marco de datos aquí, y luego digamos fuente de datos de columna, CDS, eso sería igual a la fuente de datos de columna. Entonces los métodos y los datos que le quieres pasar. Entonces tenemos un marco de datos en este caso. Y luego una vez que haces eso, necesitas ajustar aquí, no el objeto figura porque aquí no estamos pasando ningún dato. Solo estamos construyendo el entorno para la parcela, pero necesitas modificar el quad. Método. Entonces, específicamente, desea pasar el parámetro de origen aquí, que debería ser igual al objeto fuente de datos de columna. Entonces CDS en nuestro caso, este de aquí. Entonces le estás diciendo a Bocket que use estos datos, y luego no es necesario que apunte al marco de datos Así que sólo tienes que introducir los nombres de tus columnas ahí. Entonces veamos qué tenemos esta vez. Objeto, otro sale. Aquí hay una gráfica. Y si, casi ahí. Pero el problema es esta vez no estamos recibiendo los días en el formato correcto. La razón de ello es que el método Hotol. Entonces aquí, estamos aquí. El método Hovertol no es capaz de obtener tipos de datos de horas de día Pero eso no es nada de qué preocuparse porque lo que podemos hacer es convertir los tiempos de datos en cadenas en el marco de datos. Entonces, antes de pasar el marco de datos al método de objeto fuente de datos de columna, convertimos las columnas de inicio y final en tipos de datos de cadena Entonces ya sabes trabajar con daytis. Entonces en este caso, haremos algún formateo diurno. Entonces lo que podríamos hacer es crear otra así una nueva columna, digamos, iniciar cadena. Entonces, la versión de cadena de la columna de inicio, que debe ser igual a la columna de inicio existente. Dot DT, que le permite realizar formateo diurno y tiempo STR f. Y aquí es ahora cómo defines tu fecha para que se muestre. Entonces querrás mostrar primero el año, y luego el mes, un guión, y el día después de eso, y tal vez un espacio ahí, una hora, minutos y segundos. Y lo mismo va para la columna final. Entonces cadena, y aquí, y lo mismo aquí. Y como se puede suponer ahora, necesitamos reflejar esos cambios aquí. Entonces esta debería ser cadena de inicio, y esta debería ser la cadena final. Entonces estamos mostrando estas cadenas ahora a la ventana emergente. Y veamos cómo va esto esta vez. El primer objeto pasa ahí, segundo, y el último y uno más. Dejar de fumar. Y aquí tenemos un problema, supongo. Aquí no cambié los valores. Entonces hice completamente lo incorrecto. No debería haber cambiado los días en este objeto cuadrante porque esto es datetimes porque aquí hemos definido el eje diurno Entonces este expreso daytis. Entonces aquí debería estar iniciar la columna de inicio original y aquí la columna final. Entonces, por error, puse esos valores ahí dentro. Así que comienza la cadena aquí y la cadena aquí. Entonces eso debería hacerlo esta vez. Vamos a verificar dos veces. Todo se ve bien. Y vamos a ver. Aquí vamos. Sí, pudimos tomar los datos. A ver. Sí, esto se ve bien. Entonces ahora creo que esta gráfica es bastante legible, y creo que eres capaz sacar alguna información de esta gráfica. Para que puedas ver cuánto tiempo permaneció un objeto en el fotograma de video y cuándo empezaste y cuándo salió del fotograma Y espero que esto te resulte útil a veces. Como ya dije, se puede usar un servidor de pastel de frambuesa. Así que solo tenemos una pequeña computadora y alojamos esta aplicación en ese servidor. Y claro, puedes construir y por supuesto, puedes montar una cámara en ese servidor y hacer que capture algún video para tus necesidades. Lo más importante, espero que hayas aprendido de esta actividad de práctica, y sé que fue bastante para consumir. Si tiene alguna pregunta, sin embargo, estaría encantado de responderlas. Así que por favor siéntase libre de preguntarles en el tablero de discusión. Y voy a hablar con usted más adelante en las próximas conferencias. Nos vemos. 131. App 4 parte 1: análisis de datos y visualizaciones con Pandas y Matplotlib +++: Hola y bienvenidos a uno de los proyectos más importantes del curso, el proyecto de análisis y visualización de datos. Como ya sabrás, Python es sin duda el mejor lenguaje de programación para el análisis y visualización de datos. Python fue capaz de superar lenguajes que se utilizan en el análisis de datos como R, y el secreto de Python es una gran variedad de bibliotecas que se pueden usar con Python Y eso significa que puedes combinar tus informes de análisis de datos y gráficas que crees con Python con otras bibliotecas de Python para hacer aplicaciones completas como aplicaciones web o incluso aplicaciones de escritorio, automatizar cosas, etcétera Entonces Python es definitivamente la herramienta adecuada para usar con el análisis de datos. Es muy poderosa. Ahora bien, en esta sección, no simplemente te voy a mostrar el código que hace esta operación y esa operación, sino que también te mostraré la lógica detrás del análisis de datos, qué debes hacer cuando tienes un proyecto de análisis de datos. Ya que soy licenciado en análisis de datos geoespaciales, así que te mostraré algo de mi experiencia en la Te voy a dar un conjunto de datos de 45 mil registros, y vamos a convertir estos datos en información De eso se trata el análisis y visualización de datos de convertir los datos en información. Por ejemplo, vamos a responder preguntas como, ¿cuál es el día de la semana en que la gente es la más feliz Y vamos a usar nuestros datos para eso. Los datos son simplemente datos, pero conociendo el día más feliz de la semana, eso es Ahora, una parte importante de esta sección es la parte de visualización de datos. Entonces déjame mostrarte algunas de las tramas que vamos a crear en esta serie de videos solo para darte un incentivo, una motivación para que realmente veas esta serie de videos. Todas estas gráficas son interactivas. Entonces solo para darte una idea cómo se verán estas gráficas, aquí hay algunas parcelas que vamos a crear. Esta en particular muestra la calificación promedio todos los días, por lo que la fecha es a lo largo del eje X, y la calificación promedio es a lo largo del eje y. Entonces vamos a hacer gráficos circulares como éste. Y también otros tipos interesantes de gráficos. De hecho, te voy a mostrar la forma en que puedes hacer cualquier tipo de gráfico que se adapte a tus datos, a tus necesidades. Y eso va a ser bastante fácil, en realidad, porque te voy a decir el truco, la lógica detrás de eso. Y la buena noticia con estas gráficas es que no hay que hacer mucha configuración porque estas son hermosas listas para usar, y eso es posible gracias la biblioteca que vamos a usar. Así que prepárate para esto, y te hablaré en el siguiente video. 132. Explorar el set de datos con Python y Pandas +: Bienvenido de nuevo. Cuando estás haciendo análisis de datos, lo primero que quieres hacer es familiarizarte con tus datos usando la herramienta, la herramienta de análisis de datos que has elegido usar para tu proyecto en particular En este caso, la herramienta es Python. Entonces lo que vamos a hacer en este video es que vamos a cargar los datos en Python usando un cuaderno de Júpiter Entonces mira esos datos y extrae alguna información muy básica sobre los datos, como mirar qué nombres de columna tenemos, cuántas filas tenemos y otros atributos simples de nuestros datos. Hagámoslo. Me gustaría hacerles saber que creé una carpeta vacía llamada review. Subrayar Análisis y pongo las revisiones que archivo CSV en esa carpeta Puedes encontrar estas reseñas que archivo CSV adjunto a esta conferencia, así como un recurso de conferencia. Entonces, por favor, descárgalo y colóquelo en una carpeta tal como lo hice yo. Y entonces deberías poder ubicar esa carpeta desde la página principal de Júpiter, que se localiza 8888 barra tres Entonces creé esa carpeta directamente en la carpeta de mi usuario, entonces esta es la carpeta. Puedo hacer clic en eso y aquí están las revisiones que archivo CSV. En tu caso, puedes crearlo donde quieras y luego localizarlo usando este árbol de directorios aquí. Mientras estoy en esta carpeta de Júpiter, puedo ir a la nueva lista desplegable e ir a Python tres para crear un nuevo cuaderno de Júpiter Por lo que se ha creado el cuaderno de Júpiter. Puedo cambiar el nombre de esto a otra cosa, el nombre del cuaderno de Júpiter Mantengámoslo simple y digamos reseñas. Renombrar y eso obtendrá en la extensión IPYNB. Déjame hacer algo más de espacio aquí para que veas más código. Voy a apagar el encabezado. Y ahora comencemos a codificar. Lo primero que queremos hacer, por supuesto, es importar Pandas, la biblioteca que se utiliza para realizar análisis de datos con Python Y entonces queremos crear una variable que va a contener los datos que es igual a Pandas leídos Como estamos trabajando con un archivo CSV, el método que queremos usar fuera de la biblioteca Pandas es Leer CSV Entre paréntesis, queremos pasar comillas simples o comillas dobles, donde quieras La ruta al archivo CSV. Ahora bien, si no escribes el nombre correctamente, vas a obtener un error. Entonces déjame intentar ejecutar esta celda usando Control Enter si estás en Windows o Command Enter si estás en Mac. Como te advertí, me dio un error. Dice que no hay tal archivo o directorio porque escribí mal el Así que las opiniones. Esta vez, si ejecuto, no obtengo un error, eso significa que los datos se cargaron correctamente, y puedo presionar Escape, B, Enter, y llamar a la variable de datos y Control Enter nuevamente para ver el marco de datos. Entonces podemos ver que tenemos una, dos, tres, cuatro columnas. Y también tenemos esta columna índice aquí agregada por Pandas automáticamente Básicamente es un rango de números a partir de cero. Entonces esa es la primera fila de nuestros datos, esta de aquí. Eso tiene este índice de cero. Y termina en la última fila. Se puede ver que esta es la primera fila, segunda, tercera, cuarta, fila cinco, y luego Júpiter no está mostrando la fila tras fila cinco porque hay muchas filas, y sería poco práctico verlas Sin embargo, se llega a ver las últimas cinco filas del marco de datos. Y eso te da una visión general del marco de datos. Sin embargo, lo que me gusta hacer en cambio es simplemente imprimir la cabeza del marco de datos, que es solo las primeras Filas. Entonces las primeras cinco filas, eso te da una vista más compacta. Te da una idea de qué columnas tienes y qué tipo de filas tienes también. Por lo que es bueno tener la cabeza del marco de datos que se muestra aquí. Entonces podemos presionar Escape. B y crea una nueva celda aquí. Entra para escribir algún otro código. Puede obtener la forma del marco de datos accediendo a la propiedad shape. Entonces ese es un método con paréntesis. Eso es una propiedad. No necesita paréntesis. Y luego se llega a la forma del marco de datos, que es básicamente el número de filas y el número de columnas. Ves una, dos, tres, cuatro columnas. También es posible que desee ingresar, mostrar las columnas que tiene su marco de datos. A pesar de que los tenemos ahí, esta es otra forma más de ver los nombres de las columnas accediendo a la propiedad de columnas. A continuación, generalmente cuando estás trabajando con datos, tienes algunas columnas específicas que te interesan, que podrían ser una columna o más. En este caso, nos podría interesar ver una visión general de la columna para ver cuál es la calificación mínima y cuál es la calificación máxima y la distribución de esas calificaciones y tenerlas como una gráfica aquí mostrada aquí para que podamos tener una mejor comprensión de nuestros datos. Entonces voy a hacer escape, B, enter y data dot Hit. Entonces este será un histograma. Con paréntesis, nos interesa ver la distribución de las calificaciones Por lo tanto, entro aquí a la columna de calificación, digo cadena, ejecuto, y obtenemos esta gráfica. Déjame explicarte lo que significa esa gráfica. Lo que esto significa es que, por ejemplo, empecemos por la derecha. Este bar aquí, este primer bar significa que tenemos alrededor 24,005 reseñas de estrellas, calificaciones Verás, por ejemplo, tenemos esta es una calificación de 5.0 estrellas. Así que tenemos alrededor 24.005 calificaciones de estrellas en todo el marco de datos Y en total, tenemos 45 mil filas en total. Entonces al siguiente este bar de aquí, estas son calificaciones de 4.5 estrellas, como esa de ahí dentro. Y tenemos alrededor, digamos, 7.000 de esos Entonces tenemos calificaciones de cuatro estrellas, alrededor de 9,000, quizás, 3.5 calificaciones de estrellas aquí Se trata de tres calificaciones de estrellas. Se trata de 2000. Entonces tenemos 2.5 calificaciones de estrellas. Este de aquí, dos calificaciones de estrellas. 1.5 calificaciones de estrellas. Ese es el número más bajo entre todas las calificaciones. Entonces la gente no deja muchas calificaciones de 1.5 estrellas. Y también tenemos esta calificación de una estrella aquí. No es el gráfico bajo. No me gusta personalmente, pero es una forma rápida para que sepas cómo se distribuyen tus datos. Sabes que, bien, tenemos datos 1-5 y cinco es el valor que más ocurre en tus datos. Y eso es sobre esta conferencia. Esto para que pueda obtener una visión general de su marco de datos. En la siguiente conferencia, vamos a acercar nuestro marco de datos para poder seleccionar filas particulares o rebanadas particulares de nuestro marco de datos para ver valores individuales. Entonces, en otras palabras, vamos a usar Python para navegar por nuestros datos y seleccionar secciones particulares de los datos y mostrarlos. Entonces te veré en el siguiente video. 133. Selección de datos con Python: Hola, bienvenido de nuevo. En este video, vamos a acercar los datos a nuestro marco de datos seleccionando columnas particulares del marco de datos, filas particulares, múltiples columnas, múltiples filas, estantes específicos en el marco de datos, vamos a aprender a aplicar condiciones para que puedas extraer datos en función de diferentes filtraciones y así sucesivamente Entonces comencemos. Voy a abrir Júpiter Y voy a ir al análisis de revisión. Carpeta y haga clic en el archivo Jupiter Notebook. Ahora bien, algo que debes saber es que si yo en una nueva celda aquí y trato de acceder a la variable de datos, vamos a obtener este error de nombre. Los datos no están definidos porque cuando se acaba de abrir un cuaderno de Júpiter, las celdas no se ejecutan automáticamente Entonces esta no es una variable todavía en el espacio de nombres de esta sesión interactiva de Python. Por lo tanto, debes ejecutar las celdas ya sea yendo a la primera celda y presionando Shift Enter, luego Shift Enter para ejecutar la otra celda Shift Enter, Shift Enter, o puedes ir a este botón. Para ejecutar todas las celdas. Entonces presiona eso, reinicia y ejecuta todas las celdas. Y entonces vas a tener acceso a la variable Delta así. Bien, entonces solo quería asegurarme de que sabes que estás al tanto de ese comportamiento específico de Júpiter Ahora, quiero poner algunos encabezamientos aquí, algún texto. Por ejemplo, quiero poner el título de esta primera sección que hicimos en el video anterior. Quiero ponerle un nombre a eso. Entonces quiero agregar una celda encima de esta celda. Por lo tanto, lo que hago es, primero, me aseguro de que no estoy en cierto modo, así que presiono escape para eso. Después presiono A en el teclado, y se va a agregar la nueva celda. Entonces presiono sin entrar a la celda. Entonces, sin entrar, asegúrate de presionar escape. Sin ingresar a la celda, presionamos M, y eso convertirá la celda en una celda markdown, lo que significa que la celda ahora no espera código Python Se espera texto Markdown, que es básicamente algún tipo de lenguaje Por ejemplo, si escribimos dos de estos símbolos hash, y estamos justo sobre la vista del marco de datos. Y luego presionamos Comando Entrar, eso se va a convertir en un título, en un encabezado. Básicamente H a rumbo. Si agregas una más, vas a obtener fuentes más pequeñas y así sucesivamente. Entonces dos está bien. Y luego voy a agregar aquí, así que convierte esto en rebajas con escape, y luego aquí mismo, seleccionando datos del marco de datos Y luego B para ingresar a la nueva celda de código, modo que esa es una celda de código que es una celda de rebajas Entonces déjame mostrarte cómo puedes seleccionar una columna del marco de datos. Escapar. Seleccione una columna. Control Enter. B, Enter para seleccionar una columna, puedes usar esa sintaxis y luego ejecutarla. Y esta es una columna. Ahora, podría preguntarse, ¿por qué necesitamos seleccionar una columna? ¿Cuál es el interés detrás de eso? Bueno, la respuesta es que este es el primer paso hacer más análisis. Por ejemplo, si quieres extraer la media, la media de la columna de calificación, entonces primero necesitaríamos extrat la columna y luego aplicar esa media El método mean ejecuta, y eso le dará la calificación promedio de todos los cursos para todo el marco de datos Entonces la calificación de todas las 45 mil filas. Entonces ese es un ejemplo de por qué necesitaríamos seleccionar una columna. Pero permítanme borrar la media ahora. Entonces así es como seleccionar una columna. Ahora, escape B, Entra. Seleccione varias columnas. Ejecutar, B, Entrar. Para seleccionar varias columnas, usarías más o menos la misma sintaxis. Pero en lugar de insertar una sola columna aquí como hicimos la clasificación de cadenas, en este caso, insertaríamos una lista de múltiples columnas. Digamos que queremos el nombre del curso. Así que una cadena, una coma fuera de la cadena, otra cadena, calificación, y luego ejecutar Y eso te dará básicamente un marco de datos que contiene solo esas dos columnas. Ahora bien, hay una diferencia fundamental entre esta salida y esa. También puedes ver que esto tiene formato diferente con líneas, por lo que parece una tabla porque en realidad se trata de un marco de datos. Entonces si aplicas tipo, de esa expresión. Entonces esa es la expresión. Nosotros usamos. Si ejecuta eso, verá que se trata de un marco de datos de marco de datos. Pero si vemos el tipo de esa otra expresión, van a ver que se trata de una serie. Entonces una serie es otro tipo de datos de pandas igual que tenemos Marco de datos tenemos series, y las series se utilizan para representar columnas individuales como esta aquí. Entonces la columna de calificación solamente. Pero cuando tenemos más de una columna, Pandas usa un marco de datos como este Entonces esa era solo una información a tener en cuenta. No cambia mucho en la forma en que haces las estadísticas después, pero simplemente es bueno saber cómo funciona Pandas Veamos cómo seleccionar ARO. Con filas, es un poco diferente. Por supuesto, primero hay que hacer referencia a la variable de datos y luego a I lock. Y entonces necesitas corchetes. Dentro de esos corchetes, debes poner el índice de la fila a la que quieres acceder. Por ejemplo, digamos que queremos esta fila aquí o vamos a referirnos mejor a esto. Entonces la mega maldición de Python con una calificación de cinco, que tiene un índice de tres. A ver si vamos a conseguir esa fila. Ejecuta. Entonces sí, parece que es el mega curso de Python y tenía una calificación de cinco. El tiempo marca esto aquí, así que 333. Veamos todo el marco de datos. Entonces 333, esa de aquí. Esa fila es esa. El tipo de este objeto es una serie de nuevo. Entonces Pandas usa series también para filas, para filas simples. Déjame borrar ese tipo, ejecutar de nuevo. Esta es la salida. Siguiente. Seleccionando múltiples Rose. B Ingresar datos. Nuevamente, iloc es lo que usamos. Y esta vez, ya que estamos trabajando con múltiples filas, queremos introducir un slice. Digamos que queremos del Índice uno al índice tres, esas filas, y esta vez obtenemos este marco de datos, no tan serio. Entonces obtuvimos la fila con Índice uno y la fila con Índice dos porque el índice superior no está incluido en el slice ya que casi siempre sucede con Python. Entonces tiempos 512, marca de tiempo, 511. 512, cinco, Índice uno, índice dos. Sí. Entonces así es como obtienes múltiples filas. Siguiente. Selección de una sección. Lo que quiero decir con eso es básicamente una sección transversal. Así que columnas particulares y filas particulares nos darán básicamente una porción del marco de datos. Por ejemplo, queremos seleccionar columnas particulares. Nuevamente, usamos la misma sintaxis que antes. Entonces ves aquí arriba cuando seleccionamos varias columnas, así que calificación del nombre del curso dentro de una lista. Nombre del curso Rating. Entonces esto nos dará básicamente eso. Y luego fuera de ese marco de datos, lo que hacemos es aplicar Alok porque se trata de un objeto de marco de datos, ¿verdad Ese también era un objeto de marco de datos. Y como podríamos aplicar Alok a ese marco de datos, también podemos aplicar Ioc a ese marco de datos Es el mismo tipo de objeto. Entonces de eso obtenemos, por ejemplo, de fila con índice uno hasta fila con índice tres, sin tres, y obtenemos esta sección del marco de datos, que es, de nuevo, un marco de datos, tipo de objeto. Entonces solo columnas de nombre y calificación del curso y solo esas dos filas. Y por último, seleccionar una celda. Seguimos la misma sintaxis, la misma lógica. Entonces digamos que queremos seleccionar esta celda aquí. Entonces la celda que es la sección transversal de fila con Índice dos y la columna timestamp, esa de ahí, timestamp, Index dos, derecha Lo que hacemos es primero, extraemos la columna usando la misma sintaxis que usamos para seleccionar una columna, que es esta de aquí, Delta. Calificación de fecha y hora de datos esta vez. Entonces, básicamente, eso nos da una columna, pero fuera de eso, también podemos aplicar bloqueo para una serie. Entonces esta es una serie, no un marco de datos, sino una serie también podría usar esta propiedad log y luego obtener el índice dos de eso, y eso nos da el valor, que es una cadena tipo. Entonces, si quisieras calificar en su lugar, obtendrías un flotador porque las calificaciones son float, 4.0, esa de ahí dentro. Y así es como se obtiene un celular. Ahora bien, este método es muy consistente porque usa la misma sintaxis que los otros métodos. Entonces es consistente con los otros métodos de selección de datos, pero hay una manera más rápida de hacer lo mismo usando datos, la propiedad at. Y primero se pasa el índice de la fila y luego solo el nombre de la columna, calificación, por ejemplo. Y eso debería darte el mismo valor. Por lo que se recomienda usar eso cuando se está seleccionando una celda. Entonces eso es sobre esta conferencia. En la siguiente conferencia, vamos a ir más allá en la selección de datos, pero utilizando condiciones. Por ejemplo, dame todas las calificaciones que sean mayores a cuatro. Entonces filtrando en base a condiciones en el siguiente video. Ver. 134. Filtrado del conjunto de datos: Hola, bienvenido de nuevo. En este video, vas a aprender a filtrar datos de tu marco de datos. Con eso, me refiero a extraer grupos particulares de datos basados en diferentes tipos de condiciones. Por ejemplo, digamos, en nuestro marco de datos, tenemos diferentes cursos, aunque aquí solo veas los megacurs de Python porque solo estamos viendo las primeras cinco filas Tenemos otros cursos con calificaciones. Entonces, si quisieras, por ejemplo, conocer la calificación promedio para un curso en particular solamente, entonces tendrías que filtrar los datos aplicando algunas condiciones. Por lo que el filtrado le permite hacer análisis sobre un grupo particular de sus datos. Hagámoslo. Primero, voy a asignar un número a cada uno de los encabezamientos principales Entonces esa fue una visión general. La segunda conferencia fue la selección, así que ese es el número dos. Esta vez vamos al número tres, filtrando los datos en función de las condiciones. Derecha. Apliquemos primero una condición. Entonces voy a crear una celda de rebajas y decir una condición Apliquemos una condición que nos daría el marco de datos donde las calificaciones son mayores a cuatro. Para ello, tendrías que seguir esta sintaxis. Ahora, primero, asegúrate de tener tu variable de datos en el espacio de nombres ejecutando esta primera celda. Control Enter para ejecutar esa celda. Ahora estamos seguros de que los datos están en el espacio de nombres. Esta es la sintaxis de los datos corchetes y por dentro aquí va la condición así que dijimos que queremos el marco de datos donde la calificación sea mayor a cuatro. Por lo tanto, decimos que la calificación de la columna es mayor. Dejemos algo de espacio, mayor a cuatro. Si ejecutamos eso obtenemos un marco de datos y todas estas filas tienen una calificación de 4.5 o más, no cuatro porque es mayor, no es mayor ni igual. Si fue mayor o igual, también obtendremos las cuatro calificaciones, 4.0. Pero este no es el caso aquí, así que esto es lo que obtenemos. Verá, por ejemplo, que las filas con Índice 012 no se incluyeron en el marco de datos en el marco de datos de salida, y se puede ver la longitud de este usando una función de longitud de Python función Obtenemos 29,758 filas que tienen una calificación mayor De otra manera, si no quieres usar la función nativa de Python, otra forma es usar count. Entonces ese es el objeto de marco de datos, y los objetos de marco de datos tienen un método de conteo. Y se obtiene esta salida, que básicamente dice que tenemos esta cantidad de valores en nombre del curso, esta cantidad de valores en timestamp, esta cantidad en rating y comentarios Debido a que los commments tienen estos no valores que básicamente es un valor no existente, no Por lo tanto, tenemos 4.927 valoraciones con comentarios donde gente realmente escribió algo Entonces el resto, este menos que nos da una serie de comentarios sin valor. Por supuesto, ahora puedes aplicar diferentes tipos de estadísticas a esto. Por ejemplo, este es un marco de datos a la derecha. ¿Cómo extraemos solo la columna? ¿Cómo seleccionamos solo la calificación de columna? Bueno, podrías echarle un vistazo aquí, seleccionando una columna. Entonces así es como seleccionas una clasificación de datos de columna. Ahora bien, este es el marco de datos. Por lo tanto, aplicas calificación, y obtienes las calificaciones con un valor de 4.5 o más. Entonces para entender esto, lo que hacemos es, digamos que D dos es el marco de datos que obtenemos en base a esa condición. Entonces es un marco de datos. Ese marco de datos tiene una columna de calificación. Entonces eso es lo que obtenemos. Eso es lo mismo que hicimos aquí, clasificación de datos, D a calificación. Espero que quede claro. Eso también permite aplicar funciones como la media. Se obtiene la media de las calificaciones mayores a cuatro. Voy a dejarlo como estaba entonces siguiente es múltiples condiciones. Digamos que queremos filtrar el marco de datos donde la calificación es mayor a cuatro y el nombre del curso es igual al curso completo de Python construido diez aplicaciones OP profesionales. Derecha. Entonces este curso aquí. Déjame copiar la cadena para que no haga ningún tipo de errata. Así es como se hace ese filtrado, doble filtrado. Empiezas con eso. Y entonces en vez de poner una condición como lo hicimos aquí, pondríamos dos condiciones que estarían separadas entre paréntesis Entonces la primera condición ahí y la segunda condición ahí dentro. Entonces como primera condición, pondríamos lo mismo. Por lo que esa calificación delta es mayor a cuatro. Entonces ves que la condición está dentro del paréntesis. Esa es la primera condición. La segunda condición es donde Delta, dijimos que el nombre del curso es igual a dos, la cadena, el curso completo de Python, columna construida diez aplicaciones OP profesionales, derecha, ejecutamos, y obtenemos el marco de datos basado en ese filtrado. Entonces como este es un marco de datos, ese marco de datos, podemos extraer calificación de eso y luego obtener la media de la columna de calificación, y eso nos dará este número. Por lo que la calificación promedio de las calificaciones superiores a cuatro para ese curso. Y este es el marco de datos del filtro nuevamente. Y eso es sobre esta conferencia. En la próxima conferencia, vamos a mirar el filtrado de datos en función de los tiempos. Entonces, ¿cómo puede extraer partes de su marco de datos para un período en particular Entonces ya ves que tenemos esta columna de marca de tiempo aquí, y eso va entre Veamos cómo lo haces en el siguiente video. 135. Filtrado basado en el tiempo: Hola, bienvenido de nuevo. En el video anterior, hicimos algunos filtros basados en condiciones. Entonces aplicamos una condición aquí y múltiples condiciones aquí, dos, para ser exactos. Pero podemos aplicar más de dos usando la misma sintaxis. Bien, entonces aquí aplicamos la condición comparando números. Así que trabajamos con tipos de números, calificando la columna de calificación tenía tipos de datos numéricos y la columna de nombre del curso donde dijimos que solo queremos los registros donde el nombre del curso es igual a esa cadena. Entonces estos nombre columna, él cadena de tipos de datos. Así que los tipos de datos de cadena, los tipos de datos numérica. Pero, ¿cómo comparamos? ¿Cómo filtramos los datos en función de los tiempos de los datos? No es tan sencillo, pero tampoco es difícil. Entonces hagámoslo. Agreguemos una nueva sección principal. Entonces, digamos que esta vez el filtrado basado en el tiempo. Derecha. Así que vamos a extraer las críticas que quedaron durante el segundo semestre de 2020. Intentemos aplicar la misma sintaxis que ahí. Entonces comenzamos con el marco de datos y corchetes. Ahora, esta vez necesitamos dos condiciones. ¿Por qué? Bueno, porque en la primera condición, diríamos Delta. La marca de tiempo es mayor que el primero de julio de 2020, y la otra es la marca de tiempo Delta. Es menor al 31 de diciembre. Por lo que mayor que primero de julio significa segundo de julio , tres de julio, cuatro de julio, y así sucesivamente. Entonces queremos esos datos para ese periodo. Pero también queremos la otra condición de que los datos no sean mayores al 31 de diciembre. Por eso usamos eso menor al 31 de diciembre, que sería el 30 de diciembre, 29 de diciembre, y así sucesivamente. Pero, ¿cómo escribimos aquí el 1 de julio? Bueno, para eso, necesitamos un objeto datetime. No podemos simplemente escribir una cadena, escribir como los primeros siete, 20, 20 Python no es tan inteligente. Es un lenguaje de programación. Bueno, es posible que los desarrolladores de Python puedan escribir algo para leer ese tipo de cadena, pero sería propenso a errores. Ya sabes, alguien lo escribe de otra manera, alguien lo escribe así. Y así sucesivamente, se quiere ser explícito para poder evitar errores no deseados. Y por medios explícitos necesitamos usar un tipo de objeto datetime adecuado Entonces voy a importar desde el día, importar datetime. Entonces importamos ese objeto diurno fuera de la biblioteca diurna. No olvides ejecutar esa celda y bajar aquí y usar ese objeto datetime que acabamos de importar de la biblioteca diurna, que sería 2027 significa julio y primero de Entonces eso nos daría el 1 de julio en el tipo de datos adecuado. Podemos hacer lo mismo para esta fecha hora, 2020, que sería el 12 de diciembre, 31 de diciembre. Derecha. Ahora, creo que es más significativo decir mayor o igual que el primero de julio y también menos o igual. Entonces tienes la idea de incluir esas fechas también en el periodo. Ahora vamos a ejecutar esto. Y nos sale un error. Bajemos aquí a leerlo. Es un error de tipo, lo que significa que de alguna manera se usó el tipo incorrecto. Pero leamos más para entender de qué se trata. Por lo que esta operación, este operador de comparación no es compatible entre instancias de cadena y datet esa fecha hora Entonces parece que ese operador se aplicó entre una cuerda y un día ese día. ¿Correcto? Entonces, ¿cuál es la cuerda aquí? El primero. Entonces data timestamp es una columna que contiene cadenas. Entonces la marca de tiempo contiene cadenas. Estas son todas las cadenas. A pesar de que parezcan fecha, no son fechas. Entonces la idea aquí es que Python no puede comparar las horas de fecha, por lo que esa fecha y hora con esas cadenas. Por lo tanto, necesitamos instruir a Python para que los trate como horas de fecha como objetos diurnos para que luego Python pueda comparar dos objetos diurnos, lo cual es más significativo que comparar una cadena durante el día Para hacer Python, léelas como horas del día, tenemos que ir a la cima de nuestro guión. Y cuando leemos el marco de datos usando el método CSV, necesitamos agregar otro argumento, que es parse date. A través de ese argumento, le decimos a Python a través de los corchetes qué columnas deben tratarse como fechas y horas. Entonces marca de tiempo, analizar fechas iguales a marca de tiempo entre corchetes cuadrados. No olvides ejecutar esa celda y luego bajar aquí, ejecutarla otra vez, la celda. Obtenemos otro error esta vez, nuevo, un error de tipo. Dice comparación inválida entre eso y aquello. Entonces esta vez, ves que esto es para eso. Entonces esta es una fecha y hora UTC. Y ese día es ese. Entonces Python está tratando de comparar esos dos, que a pesar de que son objetos diurnos, ambos son objetos diurnos, Python todavía no puede compararlos porque uno de ellos, que es este de aquí, es un objeto diurno ingenuo, lo que significa que el objeto diurno conoce su sistema de tiempo Por lo tanto, Python para estar en el lado seguro, te dice eso, Bien, no sé qué hacer con estos horarios de dos días porque no puedo compararlos ya que no sé qué sistema de tiempo son. Entonces, aunque puedan parecer que esto es más pequeño que eso, esto podría ser en realidad mayor que el otro porque este podría ser otro sistema de tiempo, deberíamos hacerlo mayor. Para entender la importancia de la explicitud en la programación, imagine una torre de control de tránsito aéreo Cuentan con esta aplicación que recibe señales de dos aviones que vienen al mismo tiempo que pasan por esta torre Un avión viene de Estados Unidos, un avión viene de Indonesia. La aplicación necesita procesar el tiempo enviado por estos dos planos. Y en esa señal, además de la hora, la aplicación también tiene que conocer el sistema horario de cada uno de estos dos tiempos de fecha. De lo contrario, si esos dos valles solo dijeran las 6:00 AM América y las 7:00 A.M. Indonesia, el programa pensaría que hay una diferencia de 1 hora. Entonces podría estropear una cadena de otros procesos, y eso podría ser peligroso. Entonces explícito es mejor. Entonces, en definitiva, para ser explícitos, necesitamos declarar un sistema de tiempo para esta fecha y hora, así como éste tiene un sistema de tiempo, y se puede ver eso. Vamos a agregar otra celda aquí, y dices datos, tiempo, sello, ejecutar, obtienes la serie. Pero también aquí abajo, se ve fecha hora 64, es UTC, UTC. Así que declaremos datetime también como UTC. Hazlo usando TZ info, este argumento, que obtiene un valor un tipo de objeto, un tipo de objeto UTC, que necesita ser importado. Es un objeto específico del sistema de tiempo. Entonces ve a las importaciones y di desde PY TZ Import, UTC, no olvides ejecutar esa celda, baja aquí y haz lo mismo para el otro tiempo de datos. Entonces otro argumento Ts que info igual a UTC, ejecutar. Y esta vez, finalmente, conseguimos el marco de datos filtrado. Ves las fechas aquí. 20 2012, 30 de diciembre. Y también aquí abajo vemos el 1 de julio. Con una calificación bastante baja, tristemente. De todos modos, así es como puedes filtrar los datos en función de las timestamps Gracias por seguir. Hablaré con usted más tarde. 136. Convertir datos en información: Hola, y bienvenidos a este nuevo video, que va a ser un poco diferente a los demás. En los videos anteriores, te mostré algunas técnicas para filtrar datos de un marco de datos. Y eso fue básicamente acceder a columnas y filas y celdas y también aplicar condiciones al acceder a estas columnas o filas o celdas de un marco de datos. No obstante, lo que hemos hecho hasta ahora es simplemente extraer datos de los datos. Esto todavía no es el análisis de datos porque el objetivo del análisis de datos es convertir los datos en información. De eso se trata el análisis de datos, pero esto todavía no es información. Por ejemplo, digamos que queremos las calificaciones por encima de cuatro, y obtuvimos este marco de datos, pero sigue siendo un marco de datos. No es amigable con los humanos. No es información. La información sería si en cambio obtuviéramos el promedio de las calificaciones por encima de cuatro. Entonces terminaríamos con un solo número. Esa es la información porque es legible por humanos. Nos dice algo, o tal vez podríamos crear una trama, una gráfica donde pudiéramos ver las calificaciones a lo largo del tiempo. Vemos la gráfica, y podemos ver una tendencia y podemos aprender alguna información de esa gráfica. Convertir los datos en información es lo que vamos a hacer a continuación, y para este video en particular, vamos a responder una serie de preguntas. En otras palabras, vamos a extraer alguna información, como vamos a obtener la calificación promedio, la calificación promedio para un curso en particular, y así uno. Ahora bien, deberías poder escribir realmente el código antes que yo porque ya sabes, por ejemplo, cómo extraer la columna de calificación. Y también te di algunas pistas de que podrías usar un método medio para obtener la calificación promedio de esa columna Entonces comencemos con la primera información. La calificación promedio para todos los cursos para todos los tiempos. Eso sería Media de calificación de datos. Y esa es la calificación promedio. Así que al igual que teníamos aquí en la selección de una columna, calificación Delta. Eso es lo que hacemos aquí también. Entonces eso nos da una columna, y eso nos da calificación. Derecha, siguiente, calificación promedio para un curso en particular. Esta vez tenemos que aplicar una condición que es delta nombre del curso es igual. Por lo que el operador de doble asignación es igual a uno de los cursos. Digamos que el mega curso de Python construyó diez aplicaciones del mundo real. Ahora bien, si te pierdes una sola letra en la cadena, no vas a obtener el resultado esperado. Digamos que escribiste A pequeña en lugar de A mayúscula, y obtienes un marco de datos vacío Si cambio la minúscula A a mayúscula, entonces obtenemos el marco de datos filtrado, y fuera de eso, queremos la Entonces esas son las calificaciones para las mega Cs de Python, y la media es la media de los megacurs de Python la calificación promedio, que es un poco más alta que la calificación promedio de todos los cursos Derecha, calificación promedio para un periodo determinado. Data, sólo voy a copiar esto y pasar aquí. Entonces tenemos esta primera condición, esa segunda condición. Entonces estamos hablando de este periodo. Se puede cambiar eso por otro periodo, digamos, todo el 2020 del primero de enero al 31 de diciembre. Ahora puede dividir esta expresión y aún así obtener la misma salida ingresando presionando Enter después del operador t. Y todavía obtienes el marco de datos del filtro de eso llegamos a calificaciones y fuera de eso, obtenemos la media. Esa es la media para 2020. A continuación, calificación promedio para un periodo determinado para un curso en particular. Voy a copiar esto presionando CC y dar click aquí y presionar V. Y luego después de esta condición, así que un paréntesis, dos paréntesis aquí voy a agregar el operador final Y presiona Enter, presiona Enter nuevamente. Y aquí voy a agregar la otra condición, que es esta de aquí. El curso es igual a esa cadena en particular, el mega Core de Python. Ejecutar. Tenemos un desajuste de paréntesis Ves que este corchete está resaltado en rojo. Eso significa que debemos quitarlo. Ejecute de nuevo, y esto es calificación. Para el mega curso de Python para 2020. Así es como obtienes información de tus datos. Sigamos con promedio de calificaciones no comentadas. Por lo tanto calificaciones no comentadas. Ya sabes eso déjame poner la cabeza del marco de datos aquí solo por conveniencia. Entonces ya sabes que aquí tenemos una columna de comentarios, que podría ser un naN, que significa anotar un número, lo que significa anotar un número, entonces es un valor nulo o podría ser una cadena, algo que un estudiante escribió como reseña para un curso en particular. Queremos obtener el promedio de las calificaciones que no tienen comandos. Entonces para hacer eso, dices datos, la condición, comentario de datos, es nulo. Este es un método en realidad, y nos da un marco de datos filtrado con solo las filas que tienen el valor de comentario como naN. Lo contrario de eso no es nulo. Entonces obtienes las filas con comentario. Lo que queremos es nulo esta vez y fuera de eso, queremos la columna de calificación y la media. Esa es la media. Lo contrario de eso sería, por supuesto, no nulo. Y vemos que la calificación promedio para las calificaciones con comentarios es mayor que la media de calificaciones sin comentario, lo cual creo que es normal. gente a la que le gusta el curso quizá tiende a escribir también algo para expresar su gratitud o no lo sé, pero esto nos está diciendo algo. Derecha, número de valoraciones no comentadas. Bueno, es fácil solo copiar eso, pegar una lágrima y en vez de mezquino, dices contar. Y este es el conteo. Lo contrario de eso no sería nulo. Así que las calificaciones con comentario cuentan. Y eso más eso, estoy seguro, da 45 mil, que es un número total de filas de calificaciones Así calificaciones sin comentarios calificaciones con comentario. A continuación, número de comentarios que contienen ciertas palabras. En el marco de datos en el comentario, digamos, algunos alumnos hablan del acento del instructor. ¿Cuál es el promedio de esas calificaciones que contienen acento? ¿La gente se queja del acento y cuántas personas se quejan del acento del instructor Consigamos esa información. Nuevamente, la condición es que Delta comentario, la cadena de ese comentario contiene la palabra acento. Lo que obtenemos es un error. El problema es que Python no puede enmascarar con una matriz no booleana que contenga valores nulos Entonces Python no puede buscar en esos valores nulos en comentario, no puede buscar una cadena en este tipo de datos. Así que queremos decirle a Python a través del argumento NA establecido para plegar. En ese caso, Python ignorará esos nuevos valores y solo buscará acento en los comentarios con una cadena con un valor. Y este es un marco de datos filtrado. Entonces todos estos comentarios en realidad están mencionando la palabra acento. ¿Cuántos de ellos? Esas son las calificaciones solamente. El recuento de las calificaciones es de 77. Entonces 77 de un total de 45 mil por supuesto, el promedio sería simplemente eso, pero cambiando ese conteo para significar Y es una calificación baja como esperaba. Entonces, debido a que los cursos son tomados de estudiantes de diferentes países, algunos de ellos pueden encontrar desagradable el acento del instructor. Entonces tal vez están dejando un comentario negativo y una calificación negativa a lo largo del comentario. Y con eso concluye nuestra conferencia aquí. Gracias por seguir. En los próximos videos, vamos a hacer algunos plotting, lo cual es muy divertido, en mi opinión, y es una manera hermosa de representar información al público ante el usuario Gracias, y luego hablaré contigo. 137. Agregar y graficar las calificaciones medias por día: Hola. En este video, te voy a mostrar cómo crear una trama de calificaciones promedio diarias. Por lo que nuestra gráfica mostrará la calificación promedio de cada día. Para ello, no voy a trabajar en el expediente anterior de Júpiter porque me gusta mantener las cosas separadas Entonces para la parte de visualización, voy a crear un nuevo cuaderno. Te sugiero que hagas lo mismo. Entonces, antes que nada, necesitamos cargar el marco de datos. Entonces solo voy a copiar esa celda del cuaderno anterior y copiarla ahí y simplemente imprimir rápidamente la cabeza de los datos solo para verificar que todo esté bien. Sí, entonces estos son el Delta, el Delta crudo. Luego presiona Escape y presiona B en tu teclado para crear una nueva celda. Presiona Enter para ingresar a la nueva celda, y vamos a crear esa gráfica. Pero antes de crear la gráfica, necesitamos hacer algún tipo de agregación de datos. Cierto estamos convirtiendo los datos en información, pero nuestros datos son bastante crudos. Ves que por un día, tenemos múltiples calificaciones dejadas por diferentes alumnos. Por ejemplo, en el segundo de un prill segundo de un prill tenemos esta calificación, tenemos eso y aquello, y eso, y así sucesivamente Queremos agregar esos números en una calificación promedio. ¿Cómo lo hacemos? Nosotros hacemos eso. Podemos hacerlo usando el método Pandas group B, que produce un nuevo marco de datos Entonces va a ser un nuevo marco de datos, pero con datos agregados. Entonces algunos datos nuevos que son promedios del marco de datos en bruto. Déjame mostrarte cómo funciona el grupo B. Entonces dije que el grupo B produce un nuevo marco de datos. Por lo tanto, voy a crear una nueva variable donde se va a almacenar el nuevo marco de datos. Entonces el promedio del día es mi nueva variable, y eso sería igual a los datos. Entonces ese grupo de marcos de datos B. me gusta mucho este método. Es muy intuitivo. Entonces estás agrupando estos datos. Por. ¿Por qué queremos agruparnos? Bueno, por marca de tiempo. Veamos qué nos da eso. Entonces voy a imprimir el promedio aquí dentro, el jefe de la media ejecutar y veamos qué tenemos. Tenemos básicamente el mismo marco de datos. Eso es porque group no pudo agrupar los datos por marca de tiempo, porque la forma en que funciona el grupo es que el grupo B intenta encontrar valores idénticos en esa columna dada En este caso, timestamp no tiene ningún valor idéntico porque cada valor es único, puede ver, es el mismo día, pero esta revisión se dejó en este momento La otra revisión se dejó en este momento y así sucesivamente. Entonces cada valor es diferente. Por lo tanto, antes de aplicar el grupo B, necesitamos hacer algún procesamiento aquí. Necesitamos agregar una nueva columna en el marco de datos de datos. Voy a nombrar esta columna D con mayúscula D. Sólo estoy tratando ser consistente con los nombres de las columnas. Ya que estos son con mayúsculas, empiezan con mayúscula después. Voy a crear esta nueva columna con mayúscula posteriormente. Así que el día de los datos es igual a la marca de tiempo de los datos. Ese DT DT es una propiedad que nos da acceso a una serie de atributos de tiempo de datos como fecha, perdón, fecha, puedes hacer mes. Y así sucesivamente. Por ahora, necesitamos la fecha. Déjame comentar esto, así que voy a seleccionarlos y presionar Control slash o command slash para comentarlos. Y te voy a mostrar el nuevo marco de datos. Entonces ese es el marco de datos. Entonces lo que acabo de hacer es que extraje de esta marca de tiempo, saqué solo la fecha Por lo tanto, lo que obtuve es que por cada marca de tiempo, obtuve la Entonces, para esta marca de tiempo, es el segundo de abril, segundo de abril, y así sucesivamente Entonces de esta manera, obtuvimos algunos datos idénticos. Ya sabes, si lo quieres mes, obtendrías el número del mes. Entonces cuatro, cuatro, cuatro, y así uno. Pero necesitamos fecha, así que voy a mantener la fecha ahí. Ahora podemos esto poco común y eliminemos datos dot heat porque ya no lo necesitamos. Y ahora podemos volver a probar este grupo por método, pero ten cuidado. Esta vez necesitamos el día aquí. Como decíamos, queremos agruparnos de día. Ejecutemos y veamos qué obtenemos. A lo mejor no es el resultado que estábamos esperando. Entonces ves que ese día aún no está agregado porque tenemos que dar otro comando aquí. Tenemos que decirle a los Pandas el método de agregación. Entonces, ¿quieres agregar en base a la media o al conteo? En este caso, es la media. Entonces diríamos punto medio, el método, ejecutar, y esta vez, esto es lo que conseguimos. Entonces eso es sólo la cabeza. Pero si se imprime todo el marco de datos, se ve que va así hasta la fecha. Entonces, para cada fila, tenemos un día, primero de enero, segundo de enero, tres de enero, y así sucesivamente. Entonces esa es la calificación promedio de todos los cursos para ese día. Ahora, necesitas entender este producto. Esto es, como te dije, es un tipo de marco de datos. Entonces el marco de datos de Panda, pero esto tiene una columna. Entonces esa no es una columna. El día no es una columna. El día es en realidad el índice. Ves que si dices promedio diario que columnas, calificación es la única columna. Y si quieres acceder a la calificación, eso sí te gusta. Califica, y obtienes esta serie. Ahora, ¿qué es esto? Este es el índice. Por lo tanto, si quieres acceder a la columna del día, no lo haces así porque esa es una sintaxis para acceder a las columnas. Cuando quieres acceder a esa columna especial, modo que esa columna de índice, quieres decir índice de puntos. Y luego obtenemos esta serie que es índice de tipo. Pero puedes convertirlo fácilmente en una lista. Por ejemplo, si te gusta tramarlos. Así que al igual que columnas índices, como éste, también son listas como tipos. Entonces matrices de datos. Ahora hagamos el complot. Para hacer el plotting, vamos a necesitar la biblioteca de salto de parcela MT Entonces voy a introducirlo aquí. Así importar MT plot lib PyPlot. Necesitamos ese módulo de la biblioteca, y una buena práctica es usar SPLT Entonces verás en la web que todo el mundo usa PLT. Entonces, si quieres ser consistente con otros programadores, quieres importar eso un PLT Eso también facilita tu trabajo porque no tienes que escribir eso abajo, sino que solo puedes decir PLT, como haremos aquí Entonces PLT dot plot es el método, y este método básicamente obtiene dos argumentos, el X y el Y. Así que estamos construyendo una gráfica con un eje X y un eje Y. A lo largo del eje X, vamos a tener los días. Eso significa que queremos el índice promedio de puntos. Entonces esa matriz ahí. Y a lo largo de Y, queremos la columna de calificación promedio. Ejecutar. Recibí un error, PLT no está definido porque olvidé ejecutar esta celda para que la importación sea válida Ahora puedo ejecutar esto de nuevo, y este es un producto. A lo largo del eje Y, tenemos las fechas, que sé que son un poco invisibles, pero vamos a arreglarlo A lo largo del eje Y, tenemos la columna de calificaciones. Ves que empieza desde 3.8 en algún lugar de aquí hasta cinco. Ahora, matplot leap elige ese rango automáticamente al mirar los datos Nuestra columna de calificación, si le echas un vistazo, dices la calificación promedio. Si extraes el máximo, el valor máximo, verás que es 5.0. Y si ves el mínimo, ves que ronda el 3.8. Un día, los alumnos dejaron una calificación promedio de 5.0, por lo que todos ellos. Otro día dejaron 3.8. Entonces matplot lip está poniendo esos dos como los límites del eje Y en lugar de comenzar el eje desde cero hasta cinco, y eso haría que la gráfica sea menos legible Entonces eso es algo bueno de MT plot lip. Lo malo es que, como puedes ver, esta gráfica no es interactiva, por lo que solo es un archivo de imagen. No puede tener capacidades emergentes por lo que podría ver algunos valores si se encuentra sobre el mouse en alguna parte. Entonces matplot lip no puede hacer eso. Sin embargo, podemos mejorar esto un poco declarando un objeto de figura y darle un argumento de tamaño fijo de digamos 253 Ese es el ancho, y ese es el alto de la parcela. Entonces ahora se puede ver que tenemos un eje X más largo y un eje Y más corto. Ahora bien, si no estás de acuerdo con esta gráfica, si piensas que ésta aún no es legible, no te dice mucho sobre la tendencia. Entonces, si la calificación ha ido aumentando con el tiempo o no, entonces lo que podríamos hacer es reducir la muestra de los datos Entonces, en lugar de extraer promedios diarios, podríamos extraer promedios semanales, y por lo tanto, tendríamos menos puntos a lo largo del eje X y una línea más suave. Entonces, en mi opinión, estos son demasiados datos. Es ilegible, no es útil. Vamos a bajarlos de muestra con una mejor gráfica en el siguiente video Entonces esto es lo que aprendiste en este video. Aprendes a agrupar datos y aprendiste a trazarlos. Ahora, déjame hacer una pequeña revisión del grupo por método en caso de que aún estés confundido. Entonces, permítanme eliminar eso en otra celda aquí y permítanme imprimir la cabecera del marco de datos agregados. Entonces ves que tenemos calificación y tenemos índice de día aquí. ¿Qué pasó con el nombre del curso? Con esta columna? ¿Qué pasó con la columna de comentarios? ¿Qué pasó con la columna timestamp? Bueno, desaparecieron porque este método de media sólo funciona con columnas que tienen valores numérica como rating. No puedo calcular un promedio sobre esa columna, comentario o nombre del curso o marca de tiempo Por lo tanto, columnas como samp de tiempo común y los nombres de los cursos eliminarán automáticamente por este método, y solo se conservarán esas columnas Del mismo modo, podrías hacer un recuento en lugar de eso. En ese caso, obtendrías un marco de datos diferente. Entonces ves que tenemos el conteo de los nombres de los cursos, lo que significa que se han creado 46 filas para esa fecha. En otras palabras, 46 opiniones. Entonces tenemos 46 calificaciones, como quieras llamarlo. Aquí tenemos siete porque lo que hace Pandas es que no toma en cuenta no valores como éste y aquel, y así sucesivamente Por lo tanto, podríamos tener esta trama de conteo. Entonces mostramos cuántas calificaciones teníamos cada día. Y eso es lo que quería enseñarte en este video. Muchas gracias. Te hablaré más tarde. 138. Minústreo y gráfico de las calificaciones medias por semana: Voy a volver. En el video anterior, desarrollamos una trama que muestra promedios diarios de calificaciones, pero también el número diario de calificaciones. En este video, queremos reconstruir esta gráfica pero semanalmente. Hagámoslo. Así que organicemos un poco este marco de datos. Voy a dar click aquí, presionar A, Enter, presionar M, Enter, y darle a esta sección una calificación de título promedio por recuento diario ya que hicimos tanto promedios como recuentos. Ejecuta esa celda. Ahora necesitamos una nueva celda aquí, calificación B promedio por semana. De nuevo, asegúrate de tener acceso a la variable de datos. Entonces este es mi marco de datos de datos. De lo contrario, primero hay que ejecutar esta celda y luego realizar las siguientes operaciones. Entonces lo primero que queremos hacer es querer voy a copiar esa línea. Y lo que queremos cambiar a partir de esto es primero, necesitamos dar para crear una nueva columna en el marco de datos de datos. Entonces llamémoslo débil. Y extraemos de timestamp hacer el punto T. ¿Debería ser débil? Probemos eso. O simplemente imprima todo el marco de datos. Todo bien. Nos llega una advertencia. Ignoremos eso por un tiempo. Y obtenemos la columna de la semana. Entonces vemos que esta es la semana 13. Esa es la primera semana. A ver. En realidad, cuál es el máximo de esa columna. Entonces es 53. ¿Cuál es el mínimo? Es una, supongo. Hmm. Entonces eso significa que solo tenemos 53 semanas. Entonces lo que está haciendo Pandas es que está agregando las semanas de diferentes años, lo que significa que está agregando las calificaciones de, digamos, la primera semana de 2019 con las calificaciones de la primera semana de 2019 y las calificaciones de la primera semana de Entonces todas esas tres semanas van a ser agregadas en una, y esa va a ser la semana uno. Entonces tenemos la segunda semana para la segunda semana de 2019, 2019 y 2020, y así sucesivamente. En total, teníamos 53 semanas porque así es la cantidad de semanas que tiene al año. Bueno, normalmente tiene 52 semanas que yo sepa, pero quizá uno de estos años probablemente sea un año bisiesto, tiene 53 semanas, supongo. De todas formas, entiendes la idea. Esto no es lo que necesitamos. Vamos a probar lo que la advertencia está sugiriendo DT así calendario. Esa semana. Hm. Parece que el máximo de nuevo es 53. Así que aún, estamos obteniendo semanas agregadas. Por lo tanto, la solución aquí es usar SDR f time, lo que significa cadena a partir del tiempo Y eso pone como argumento algunos códigos de fecha y hora como porcentaje Y, tal vez un guión o eso o espacio que depende de ti. Eso es opcional. Pero este es el código que tienes que usar si quieres extraer el año. Y luego extraemos el número de la semana. Veamos qué obtenemos esta vez. Ahora estamos hablando. Entonces esta vez, obtenemos el año y obtenemos la semana. Por lo tanto, podemos distinguir entre diferentes filas. Por lo que la semana 13 de 2021 está ahora bajo este nombre. No son sólo 13. Por lo tanto, tendremos, nuevamente, 20 2013, 2019, 13, y así sucesivamente. Así que tenemos nombres únicos desde hace semanas. Y eso es lo que nos ayudó a construir este formato de fecha y hora Podrías usar otros códigos. Entonces, si quisieras un mes, usarías un inferior. Y entonces obtendríamos el número del mes, abril aquí y la semana, el número de la semana. Como te dije, esto es opcional. Entonces, en lugar del guión, podrías usar un espacio, y obtienes el espacio entre el mes y la semana. ¿Dónde puedes encontrar estos códigos? Bueno, solo puedes Google Python códigos de formato datetime, y verás una lista, una lista grande de lo que puedes usar Así que vamos a usar aquí guión y número de semana. Entonces, ¿qué sigue? Bueno, lo siguiente es agrupar los datos. Entonces digamos promedio débil un nuevo marco de datos igual al grupo de puntos de datos por semana. Entonces esa columna. Y queremos extraer la media de eso. Veamos qué obtenemos. Entonces parece estar funcionando. ¿Ves? Bueno, bien, Python está considerando la primera semana, cero, cero, pero no importa. Creo que está bien. Y así tenemos el promedio para cada semana. Otra vez, no se olvide de eso. La columna de la semana es en realidad el índice. Entonces esa es la primera semana, la segunda semana, y así sucesivamente. Y la calificación es la columna. Entonces, hagamos el complot ahora. Gráfica de puntos PLT. Entonces tenemos que dar una X y una Y. La X esta vez va a ser débil índice de puntos promedio, por lo que la columna de semana y Calificación de datos se ejecutan. Tengo este error. X e Y deben tener la misma primera dimensión, pero tener formas eso y aquello. Entonces parece que estoy usando columnas de diferentes marcos de datos. Entonces este es un marco de datos promedio semanal, que tiene 173 filas, y este es el otro marco de datos que tiene 45 mil filas Entonces quise decir día, perdón, promedio semanal. Espera, y esta es la gráfica. Nuevamente, si quieres aplicar algún tamaño, quieres copiarlo y pegarlo aquí. Eso básicamente modifica el objeto figura. Y esta es la gráfica. Por lo tanto, calificación promedio por semana. Ahora, ya ves que las etiquetas aquí están aplastadas entre sí Y hay formas de arreglarlo. Pero yo diría que no vale la pena hacerlo aquí con Matt Plot Lee porque si realmente quieres mostrar tus datos a la gente, entonces quieres usar una biblioteca de plotting más moderna, como gráficos altos, que vamos a usar en los próximos videos Los gráficos altos mostrarán ahora un gráfico más inteligente, que es fácil de usar y crea gran experiencia de usuario e intenta mostrar la información de una manera más eficiente. Entonces voy a decir que esta representación es suficiente con el propósito de usar Matplot leap en el cuaderno de Júpiter Así que solo estamos explorando datos. Se puede ver ahora vemos una tendencia de que las calificaciones van aumentando con el tiempo. Entonces tal vez eso no era muy visible en la gráfica diaria. Entonces ve esta gráfica aquí. Esto tiene los recuentos actualmente, pero podemos cambiar eso para significar ejecutar la celda nuevamente, luego ejecutar las celdas de trazado nuevamente, y podemos ver los promedios diarios aquí, los promedios semanales aquí Entonces creo que estás de acuerdo conmigo en que es más fácil ver la tendencia en esta gráfica que en esta gráfica. Y ese es el poder de reducir el muestreo de los datos. En el siguiente video, vamos a reducir aún más los datos, y vamos a mostrar las calificaciones promedio por mes Nos vemos en el siguiente video. 139. Minústreo y grabado de calificaciones medias por mes: Hola. En este video, te voy a mostrar cómo crear una trama que muestre la calificación promedio por mes. Esta va a ser una conferencia muy corta porque ya sabemos cómo hacerlo. Todo lo que tenemos que hacer es simplemente copiar esa celda así o también puedes copiar presionando Escape y luego CC. Golpea la tecla C dos veces. Entonces aquí, sólo tienes que ir allá y decir V, y eso va a pegar la celda para que no tengas que copiar todos los códigos así. Pero en lugar de copiar los códigos, puedes copiar toda la celda. Y entonces tenemos que hacer algunos cambios aquí, mes aquí, marca de tiempo, entonces en vez de U, tenemos M. En vez de semana, tenemos En lugar de semana aquí, tenemos mes. Esto está bien. Entonces aquí actualizamos la variable mes promedio. Mes promedio ejecutar, y este es el promedio mensual. Entonces creo que está mejorando. Ya ves que ahora vemos la diferencia con más claridad. Y eso también es porque ves que el rango ha cambiado sobre la gráfica ya que tenemos más datos agregados, por lo que ahora tenemos promedios mensuales. Eso significa que no hay una gran amplitud, una gran diferencia entre el valor más alto por lo que se ve que el valor más alto ahora está en algún lugar en 4.6 y el valor más bajo, que está en algún lugar en 4.3 o 4.35 Eso hará que las alturas y picos sean más evidentes para el usuario. Bien, y eso es sobre este video. En el siguiente video, vamos a hacer algo más diferente. Vamos a buscar crear múltiples líneas en una sola parcela, y cada línea va a representar el promedio mensual de calificaciones para cada curso. Hasta el momento, solo teníamos cursos agregados. Entonces hablemos contigo en el siguiente video. 140. Calificaciones promedio por curso por mes: Hola, bienvenido de nuevo. En este video, vamos a generar una trama que contenga diferentes líneas, y cada línea va a representar la calificación promedio por mes para un curso en particular. Entonces tenemos múltiples cursos. Vamos a tener una línea para cada curso. Hagamos eso. Pongamos un rumbo de tres años. Esta sería calificación promedio por mes por curso. Derecha. Así es como lo hacemos. En primer lugar, necesitamos una columna de mes en el marco de datos de datos. Ahora, sé que lo hicimos aquí. Ya tenemos esa columna del mes, pero quiero mantener el código separado, que no haga daño si lo vuelves a hacer aquí solo por consistencia. Entonces, para decir que esta celda está haciendo esa cosa en particular, entonces está construyendo una gráfica de múltiples líneas, y para esa gráfica, necesitamos esta expresión. Entonces es la misma expresión. Sólo puedo copiar eso y pegarlo aquí. Cierto, no necesitamos cambiar nada ahí, así que solo necesitamos extraer el mes y vamos a verificar. Entonces tenemos el mes para cada fila. Ya que estamos agrupando por mes, tiene sentido tener eso. Entonces necesitamos usar el método group by para crear un nuevo marco de datos, que sería una agregación. Ahora, sólo para que lo comparemos para compararlo. Veamos cómo se ve el marco de datos promedio del mes anterior . Entonces otra vez, eso es lo que teníamos. A este marco de datos le falta la información sobre los cursos. Por lo que le falta la información del nombre del curso. Ya ves aquí tenemos esta columna. Necesitamos tener esa dimensión alguna manera en nuestro nuevo marco de datos agregados. Entonces, lo que tenemos que hacer aquí es algo diferente. Nuevamente, necesitamos crear una nueva variable. Llamemos a esto un CRS promedio mensual tal vez por supuesto, para distinguir entre ese marco de datos y ese mes promedio mensual CRS promedio Esto nuevamente será un producto por producto de ese marco de datos, utilizando un grupo por método. Pero en este caso, déjame borrar eso para que puedas ver el otro código aquí para ver la diferencia. En este caso, vamos a tener no solo el mes aquí en la lista de columnas a utilizar para el proceso de agregación, sino que también vamos a tener, puedes adivinar qué nombre del curso? Entonces, por mes por supuesto, eso es lo que necesitamos. Apliquemos ahora significa y veamos qué obtenemos hasta ahora. Entonces este es un marco de datos. Y básicamente, este tiene en realidad dos niveles de índices. Tiene el mes y el nombre del curso. Se puede ver eso si hace ese índice. Entonces ves que es un índice múltiple. Ves la columna del mes y también el nombre del curso que no aparece aquí, pero está ahí y como lo viste, podrías verlo aquí dentro. Ves que estos están en negrita. Estos valores, eso significa que son índices. Y esto de aquí es una columna. Por lo que las columnas están valorando solo, sólo una columna. Ahora bien, esto aún no es muy útil porque la forma en que se construye esto es que tenemos una fila aquí. Entonces este es un grupo de filas. Comienza aquí. Entonces el primer plato, el segundo curso, el tercero, cuarto, quinto. Y también hay algunos otros cursos aquí, que en realidad los podemos ver aplicando aquí una rebanada. Entonces veamos los primeros 20 registros. Ahora vemos los primeros 20 registros en su totalidad, completos el primer día de perdón, primer mes de 2018, segundo mes de 2018, y así sucesivamente. Ese curso tiene esa calificación para ese mes. Ese curso tiene esa calificación promedio para ese mes y todos los demás cursos. Entonces el mismo patrón, como este de aquí se repite una y otra vez durante todos los meses. Ahora bien, para tener estos datos en una mejor estructura, lo que haríamos es aplicar aquí método unstack para básicamente desapilar este marco de datos y terminar con esta mejor Entonces ahora tenemos una especie de tabla dinámica, por así decirlo, tenemos el mes aquí, primer mes, segundo mes, tercer mes, y cada columna ahora está representando un curso así que si quieres saber, por ejemplo, la calificación del curso completo de Python construyó diez aplicaciones profesionales de OOP para un mes en particular, digamos, ésta, no es ninguna porque el curso no fue publicado aún en esa fecha. Pero si miras al final, digamos -20 Entonces verías que a partir del primer mes de 2020, tenemos una calificación para ese curso, una calificación promedio, ¿verdad? Y así sucesivamente, ¿qué podemos hacer ahora con este marco de datos? Bueno, podemos tramarlo. Pero esta vez, vamos a usar un enfoque diferente porque no podemos usar esa gráfica de puntos plt ya que tenemos múltiples, múltiples columnas Entonces esto espera una X y una Y, pero ¿cuál es la X? El X, por supuesto, es mes. Eso lo tenemos claro. Pero ¿cuál es la Y? ¿Es eso o aquello o aquello? Entonces tenemos múltiples columnas. Una forma sería escribir esta función plot varias veces, o tal vez crear un bucle que itere a través del marco de datos, pero otra forma más fácil es simplemente apuntar al promedio de CRs dot plot y Villa, tenemos Por supuesto, parece un desastre, pero vamos a mejorarlo un poco. Como usamos la función plot directamente desde el marco de datos, no desde el PLT, entonces podemos usar los argumentos fig size aquí Entonces digamos 253. Y ahora se ve un poco mejor. Todavía no es ideal, tal vez podríamos aumentar eso a ocho. Bien. Ahora está funcionando. Entonces ahí tenemos una leyenda que muestra el color de cada uno de los cursos. Nuevamente, no soy fanático de este tipo de gráficas, pero cuando usamos la biblioteca High charts con la interfaz web, esto va a verse mucho mejor. Ahora bien, ¿y si usamos conteo aquí? Obtendríamos la gráfica correctamente, pero la leyenda sería un poco desordenado. Eso es porque en el marco de datos CRS promedio del mes, no solo tenemos los recuentos de las calificaciones, sino que también tenemos otros recuentos de marcas de tiempo y cosas que no necesitamos Ya ves que, por ejemplo, este curso, 100 ejercicios de Python uno tiene aquí la marca Ya ves que es otro nivel de columnas. Entonces todos estos pertenecen a la marca de tiempo, ¿verdad? Los recuentos de marca de tiempo. Y luego tenemos los recuentos de calificación, empezando de aquí y hasta algún lado. No vemos todas las columnas porque Júpiter las está truncando, pero se entiende la idea, día y semana Entonces, ¿cómo extraemos solo la calificación? Bueno, eso es fácil en realidad. Te dije que el grupo B, que inicia aquí y termina aquí, el grupo B devuelve un marco de datos. Ahora, de ese marco de datos, extraemos solo la calificación. Y problema resuelto. Ahora obtenemos una gráfica clara que muestra el número de calificaciones que quedan por cada mes del año. Entonces, a partir del comienzo del 2019 hasta el 2020, ven aquí esta línea rosa, que es el nuevo curso, el curso completo de Python. Comienza en algún lugar en 2021. Entonces el primer mes de 2021. Y claro, puedes otra vez, conseguir la media tal como lo hiciste anteriormente. Pero con mean, nuevamente, obtenemos los mismos resultados ya que el método mean ignora marcas de tiempo y esas columnas no Entonces de todos modos, los deja caer. Pero contar no los deja caer. Los cuenta y nos da tantos datos. Cierto, espero que esto haya sido claro, y luego hablaré contigo. Nos vemos. 141. En qué día de la semana la gente es más feliz: ¿Qué día de la semana es la gente más feliz? ¿Podemos responder a esa pregunta usando Python y los datos que tenemos a mano ahora mismo? Bueno, creo, sí, podemos hacer eso, y esa es la belleza del análisis de datos. Si eres un poco creativo, puedes responder preguntas muy interesantes sobre tus datos. Entonces en este video, vamos a averiguar juntos qué día de la semana es la gente más feliz? ¿Cómo lo hacemos? Bueno, al generar una gráfica. Entonces, ¿cómo podemos hacer eso? Bueno, en mi opinión, podemos usar la lógica de que si la calificación promedio de todos los cursos, digamos, los miércoles, es la más alta de la semana, entonces podemos ver que la gente tal vez en ese día los miércoles sea más positiva Estoy seguro que podemos decir eso porque tenemos tantos datos aquí. Entonces miles de calificaciones, y estadísticamente, eso, creo, nos da mucha confianza en el resultado. Lo que tenemos que hacer es crear una gráfica, que va a tener siete días en el eje horizontal, de lunes a domingo y en el eje vertical, vamos a tener el promedio para cada día. Eso significa que tenemos que hacer mucha agregación de datos. Hagámoslo. ¿Qué día es la gente más feliz? Ahora, vamos a usar como siempre el marco de datos. Entonces donde tenemos estas calificaciones dejadas en marcas de tiempo particulares Entonces, ¿qué necesitamos extraer? Bueno, el día de la semana. Vamos a llamarlo así. Que es igual a Datos, marca de tiempo. Entonces, fuera de la marca de tiempo, accedemos a la propiedad DT, y fuera de eso, necesitamos SDR FT. Y el día de la semana. Entonces, si quieres domingo o lunes o martes, ese nombre del día de la semana se puede extraer usando el código de formato A. Puedes buscarlo en Google. Yo también lo hago. Es imposible recordarlo todo. Ahora podemos volver a imprimir datos, y vemos que tenemos un día laborable Columna. Entonces el viernes, viernes, viernes se repite una y otra vez, y necesitamos agregar ahora para obtener el promedio de cada día de la semana Entonces digamos semana día promedio para el marco de datos que va a contener los datos agregados. Nuevamente, el grupo B es nuestro ahorrador. Mm. ¿Qué utilizamos esta vez? Bueno, de lunes a viernes. Y entonces sí significa. Y veamos promedio entre semana lo que obtenemos Y eso es todo. Entonces todo lo que tenemos que hacer es, déjame borrar eso. Todo lo que tenemos que hacer es plt dot plot. El eje X sería semana el índice promedio de puntos, y el eje Y sería semana, el promedio, semana día lo siento, calificación. Trama, esta es la respuesta. Sé que el orden no es como cabría esperar, pero podemos arreglarlo. De cualquier manera, podemos decir que el viernes es bastante diferente a los otros días. Por lo que los viernes, las personas dejan una calificación promedio de 4.455 en una escala de uno a cinco Y eso tiene sentido. Creo que también caigo en ese rango, así que tiendo a ser más feliz los viernes Entonces se acerca fin de semana y fin de semana y así tiene sentido. Ahora bien, ¿cómo podemos ordenar estos datos? Entonces necesitamos ordenar la columna del día de la semana. Bueno, podemos hacer eso. comentar esto por un tiempo. Semana día promedio igual a semana día promedio punto ordenar los valores por día de la semana y luego imprimir y ver qué es el promedio del día de la semana. Y van a ver que este no es el orden que esperaríamos. Eso está sucediendo, por supuesto, porque la columna índice, esta de aquí, valores de cadena. Entonces el viernes, lunes, un día son todas cuerdas. Por lo tanto, Python los está ordenando en orden alfabético Entonces viernes, primero, lunes, y así sucesivamente, son cadenas porque este método produce una cadena, columna entre semana Ves cadena de tiempo. Así que la marca de tiempo era tiempo, pero la convertimos a cadena Ahora bien, puede haber diferentes soluciones para solucionar esto. El que me viene a la mente es que podríamos agregar un número de día de semana. O simplemente el número. Al marco de datos Data, y fuera de eso, de nuevo, usas cadena de tiempo, pero esta vez, vamos a usar porcentaje en minúscula W. Y lo que eso nos daría es, déjame mostrarte Data ahora es este marco de datos y tiene este número de día Entonces ahora tenemos un número adjunto a cada fila además del nombre del día de la semana Eso nos permite ahora ordenar los valores por esta columna de números de día. El lunes es el primero el viernes es el quinto y así sucesivamente. Hagámoslo. Voy a eliminar ese marco de datos delta de ahí, la impresión, poco común esto y cambiar eso a número de día. Y aquí, semana día promedio, eliminar, poco común esto, ejecutar. Tenemos este número de día de error clave. Ah, porque se me olvidó agregar el número de día aquí. Nuevamente, tenemos un error. Et a ver dónde ocurrió el error. Entonces estos son los errores profundos en las bibliotecas, se ve en MT plot Lip y esto muestra el error en nuestro código. Entonces es en esta línea plt dot plot. Y dice que el valor debe ser un incesto de cadena o bytes, no una tupla Así que intentemos solucionar el error aquí. Voy a descomentar esto y ver qué es el promedio del día de la semana Entonces el problema aquí es que promedio de la semana día ese índice devuelve un índice doble, que se ve así así así que es un índice múltiple. Contiene día de la semana y número de día. Por lo tanto, el método plot se confundirá, por lo que no sabe cuál de estas matrices tiene que trazar a lo largo del eje X. Entonces necesitamos una manera de extraer solo las columnas. Entonces los nombres de los días de la semana. Puedes hacerlo usando los valores get level. Ese es un método que espera un argumento. En este caso, podemos ingresar cero o uno. Cero significa que estamos extrayendo, estamos accediendo a la primera columna del índice múltiple, y una sería la segunda columna. Entonces necesitamos la primera columna. Y eso nos da esos días, entonces los nombres de los días. Por lo tanto, ahora podemos hacer uso de eso aquí para que podamos copiar esa expresión. Esa es la matriz que queremos trazar a lo largo del eje X. Entonces metemos eso aquí. Ejecutar, y esta es la salida. Si queremos que la imagen sea más amplia, necesitamos hacer plt tamaño de figura igual a una lista de 253, funciona bien, o tal vez un poco Más pequeños. Sí, esto es mejor. Entonces hay que encontrar una buena relación entre el ancho y el alto. Y nuevamente, vemos que el viernes es el día que tiene la calificación promedio más alta. Y así fue sobre este video. Muchas gracias por seguir. Te hablaré en los próximos videos. Nos vemos. 142. Otros tipos de tramas +: Hola. En este video, te voy a dar alguna información importante sobre diferentes tipos de parcelas. Creamos múltiples parcelas a lo largo de los videos anteriores, y todos ellos tenían algo en común. Todos eran parcelas lineales. Entonces, ¿cómo vamos sobre el uso de diferentes tipos de gráficas? Bueno, estas gráficas de líneas son generadas por el método plot. Pero si usas el método del venado para explorar PLT, entonces PLT, puedes ver que también puedes ingresar aquí abajo. Ves que también puedes usar otro tipo de gráficas. No todos son gráficos. Algunas de ellas son propiedades que le das a la gráfica que estás produciendo, pero verás, por ejemplo, trama está en alguna parte de aquí. Entonces eso fue trama, y se puede ver, por ejemplo, tenemos barra, esa. Si cambias eso a bar, obtenemos estas barras dentro de la línea. Pero esta no es muy buena representación para este tipo de gráficas porque las diferencias son muy estrechas entre las calificaciones. Entonces iría por la trama. Algunos de estos tipos de parcelas, por ejemplo, Pi no es apropiado para este tipo de datos. Entonces, si intentas ese Pi, vas a obtener un error. Porque si usas ayuda, entonces digamos ayuda PLT Pi Entonces un gráfico circular, vas a ver que Pi espera una X pero no una Y. Entonces, ¿cómo podríamos hacer uso de un gráfico circular con nuestros datos? Bueno, quizás, así que permítanme crear una nueva entrada aquí. Quizás podríamos hacer un gráfico circular, digamos, número de calificaciones por supuesto, lo que tendría sentido. Entonces esto es lo que podríamos hacer. Digamos que compartir el nuevo marco de datos es igual a los datos que el grupo B. Queremos agrupar por nombre del curso, por curso, y luego aplicar conteo. Y eso nos daría este nuevo marco de datos. Por lo que nos interesa la columna de calificación. Vemos cuántas calificaciones ha recibido cada curso en total. Ahora bien, si no queremos todos estos otros datos, solo nos interesa la columna de calificación. Entonces entre el recuento del grupo B y D, hacemos rating, por lo que extraemos la columna de calificación. Entonces eso nos daría eso es serio. Entonces podemos usar eso. Déjame crear una nueva celda con PLT punto pi Entonces dijimos que Pi obtiene una X como argumento. Entonces esa sería la serie de acciones. Entonces la X es al menos una serie, una columna de marco de datos. Así que cualquier tipo de array se ejecuta. Y si, este es el gráfico Pi. Pero no tiene etiquetas, así que vamos a darle algunas etiquetas. ¿Fue así? El argumento. ¿Etiquetas? Sí. Actualmente, está establecido en none, por lo que el valor predeterminado es none. Entonces, si quieres dar etiquetas, dirías, comparte índice de puntos. Índice es la columna con los nombres de cada fila. Ejecutar. Y si, esta vez, obtenemos estas etiquetas por cada rebanada del pastel. Entonces ves que el mega curso de Python, por ejemplo, tiene la mayor cantidad de calificaciones. Luego viene la Python para principiantes con ejemplos, la rodaja marrón en ella, y así sucesivamente, otros cursos también. Ahora sí obtenemos un montón de meta datos aquí también que produce este método. Pero como he estado diciendo, matplot leap no es la biblioteca de plotting más amigable, así que es buena para la exploración de datos, pero no es muy buena para presentaciones a otros espectadores, a otros lectores, a otros usuarios que quieran ver tus visualizaciones Ahora, eso termina este video. Y como te dije antes, vamos a hacer todas estas gráficas, cada una de ellas que viste, incluida esta, déjame cambiarla de nuevo a la trama. Vamos a reproducir estos gráficos, pero esta vez usando una biblioteca basada en web más moderna que traza los datos en un navegador y puedes hacer una aplicación web muy fácilmente para que puedas dar la URL de tu aplicación web a tu sitio web a los usuarios y ellos puedan explorar estos gráficos por su cuenta de forma interactiva La buena noticia es que no vamos a hacer más agregaciones usando grupo por nuestros datos están listos Sólo vamos a copiar estos y luego usar la función de plotting de la nueva biblioteca de plotting de gráficos altos que vamos a utilizar en los próximos videos Entonces, muchas gracias por seguir esta serie. Hablaré contigo en la siguiente. Nos vemos. 143. Aplicación 4 (parte 2): análisis y visualización de datos con diagramas interactivos en el navegador: Bienvenido a una nueva serie de videos. En estos videos, vamos a aprender a crear gráficos interactivos con Python. Déjame mostrarte los gráficos exo que vamos a crear a lo largo de estos videos. Este será el primer gráfico. Ves que estos son interactivos. Por ejemplo, cuando pasamos el mouse sobre la gráfica, obtenemos estas pop ups mirando el valor exacto en ese punto donde apunta el cursor Esa será la calificación promedio por día. Entonces tenemos calificación promedio por semana mes a mes por curso, para múltiples cursos. Entonces tenemos esta gráfica genial. Es un gráfico de corriente. Nuevamente, se trata de calificaciones promedio por mes por curso, pero mostradas en una trama diferente. Entonces tenemos cuando la gente es la más feliz. Entonces, por último, tenemos este gráfico circular, que, de nuevo, es interactivo. Y es mucho más parecido que los otros gráficos que construimos con el labio Matt Plot. Por lo que estos gráficos se construyen con gráficos altos. Ahora, High Charts es una biblioteca de ploting JavaScript, pero podemos usar gráficos altos en Python a través de Just Pi Y Just Pi es un framework web para Python. Es bastante nuevo, así que lo más probable es que no hayas oído hablar de ello. Y así Juspi es un framework web como FAS, pero Juspi tiene una ventaja muy crucial La ventaja de Juspi es que no tienes que escribir ningún HTML, JavaScript o CSS Puedes crear aplicaciones completas, completar sitios web de aspecto moderno solo con Jus Pi Entonces vas a disparar 2 piedras con un pájaro. Quiero decir, un pájaro con 2 piedras o dos pájaros de 1 tiro. Se entiende la idea. Entonces vas a aprender tanto Jpi como también gráficos altos. A eso me refería. Y aquí está el plan. En el siguiente video, te voy a mostrar cómo crear un sitio web Pi de una página, que contiene solo un título y un párrafo con texto. Entonces una página web sencilla. Entonces en el video posterior a eso, vamos a expandir ese sitio web agregando un gráfico de gráfico alto a la página web. Es decir, en los dos siguientes videos, vas a aprender tanto cómo crear una webapp Just By como también cómo agregar gráficos de gráficos altos a la WebApp Justpy Después en los videos posteriores a esos dos videos, vamos a aprender a crear otras gráficas. Entonces los que te mostré aquí y cuáles son los gráficos que construimos que creamos en Júpiter con Mat Plot Lip Así que vamos a crear cada uno de ellos. Así que prepárate y te hablaré en el siguiente video. 144. Cómo crear una aplicación web sencilla: Hola. En este video, vas a aprender a crear una aplicación web sencilla con el framework web Just Spy. Voy a usar el código de Visual Studio para escribir la aplicación web. Entonces Júpiter no funcionaría aquí. Entonces te sugiero que uses un IDE como código de Visual Studio o cualquier IDE o editor de texto que estés usando. Así que he empezado el código de Visual Studio aquí. Voy a ir a Archivo Abierto. En código de Visual Studio y luego ir a la carpeta donde mis reseñas se encuentra ese archivo CSV y pulsamos en abrir, y eso creará un nuevo código de Visual Studio, directorio de proyectos, apuntando a esa carpeta donde se encuentra las reseñas de ese archivo CSV. No necesitamos revisar ese CSV por ahora porque en este video, solo vamos a crear la aplicación web. Así que vamos a crear un archivo Python. Voy a llamarlo cero simple app dot PY. Entonces voy a crear múltiples aplicaciones web, y estoy usando 01234 ahora En los nombres de estos expedientes. Para usar Juspy, necesitamos tener instalado Justpy. Entonces estoy usando 3.9 Python 3.9 ahora, y voy a ir a terminal New Terminal, y aquí voy a usar PIP 3.9 ya que estoy usando Python 3.9, Install solo PY Todo bien. Eso fue exitoso. Entonces no obtuve errores. Me llegó este mensaje de que ya estaba instalado. Pero de todos modos, espero que también hayas tenido éxito con la instalación. Entonces lo que tenemos que hacer es simplemente importar. Pi. Una buena práctica es importarlo como JP porque vas a mirar la documentación de Just Pi, y todos los ejemplos están usando este nombre JP. Por lo que es una buena idea ser congruentes con la documentación. Ahora, cada aplicación By tendrá un objeto principal que se conoce como una página de Quasar Entonces esa es la página web, básicamente. Y esa página web puede contener diferentes elementos. Por lo que puede contener, por ejemplo, en la página uno, encabezado o un párrafo o tal vez una tabla. Por lo que todos estos elementos se agregarán a esa página de Quasar a la página web ¿Por qué se llama Quasar? Bueno, porque Jus Pi usa el framework Quasar, que básicamente es un framework que no está relacionado con Python Es un framework construido con JavaScript, pero Jus Pi está usando ese framework y podemos usar ese framework a través de Python Entonces déjame crear una página de Quasar. Lo que hacemos primero es crear una función de app. Puedes nombrarlo donde quieras, pero básicamente la idea es que esta app devuelva esa página de Quasar Entonces dentro de la función, creamos una variable que es igual a la página Jp quasar Entonces Q, P. Esa es una clase que estamos instanciando aquí. Así que estamos creando una instancia de objeto de instancia de página de cuasar , esta función entonces debería devolver esa instancia esta función entonces debería de página de cuasar Y en el medio es donde escribimos los elementos que esta página va a contener. Así que vamos a crear una variable para cada elemento. Vamos a crear un encabezado. Entonces un encabezado es básicamente texto, pero con un tamaño de fuente muy grande. Y hacemos JP, entonces señalamos ese punto QD, entonces QDV Básicamente es una división si estás familiarizado con HTML. Es una división, pero es una división Quasar. Así que tiene un estilo de Quasar que lo hacen lucir moderno y además te permite estilizarlo muy fácilmente como vas a ver en solo un rato Como primer argumento, debemos pasar a donde pertenece. Por supuesto, eso pertenece a WP esa variable, que llamé WP para que signifique página web, página web. Eso le pertenece a eso. Entonces otros argumentos que QD obtiene es el texto ¿Qué texto queremos mostrar ahí? Como cadena, digamos, análisis por supuesto revisiones. Agreguemos también un párrafo. Llamemos a esto P uno es igual a p punto QDV nuevamente. Siempre usamos QDV y A, vuelve a pertenecer a WP. El texto esta vez. Entonces escribamos como una descripción de la página web, estos gráficos representan la revisión del curso. Análisis de revisión de cursos. Esa sería una aplicación web muy minimalista. Pero si estamos en esto ahora, no va a pasar nada porque creamos la función, pero ninguna instancia está llamando a esa función, así que no la estamos llamando a ninguna parte. Entonces hagamos algo que llamemos a esa función. Podemos usar Pi de JP. Entonces Jus Pi es una función y espera como entrada, una función que devuelve una página de cuasar, que es esta función aquí Así que solo puedes escribir app sin llamar a la función app. Entonces Pi, esta función se encargará de llamar a esta función. Derecha. Si lo ejecutamos ahora, deberías ver aquí este mensaje de que Just By está listo para ir a esta dirección con este número de puerto 8,000. Si presionas Control y haces clic en o Comando y luego haces clic, eso debería abrir tu navegador predeterminado. Y esta es la aplicación web, así que está funcionando. Ahora bien, se esperaría que esto estaría en una fuente más grande. Eso no sucedió porque no hemos agregado ningún estilo a ninguno de estos divs Entonces estas divisiones son solo texto plano. Para agregar estilo a los elementos, puede agregar un argumento classes a cualquier elemento Q div, y eso es igual a una cadena. Entonces, ¿cómo podemos hacer que este div sea grande? Bueno, puedo mostrarte, claro, pero quiero mostrarte la forma en que puedes encontrar cualquier tipo de estilismo que puedas usar con Pi. Entonces lo que tienes que hacer es simplemente buscar el estilo Quasar. Y luego ir al primer resultado. Understyle e identidad, vas a ver los atributos que puedes cambiar para los elementos de la página, como el elemento div que tenemos a mano ahora Entonces nos preocupa la topografía. Si haces clic ahí, vas a ver ejemplos aquí. Entonces, si quieres que el texto sea tan grande, quieres usar Texto H uno. Entonces probemos eso. Cópialo y edita aquí. Texto H uno. Ahora, algo que debes saber si estás usando código de Visual Studio es que si vuelves a ejecutar el código con este botón, mientras el código se está ejecutando, no va a pasar nada. Entonces el programa simplemente se congelará y si vuelves al host local, ves que la aplicación antigua sigue ejecutándose. Entonces lo que tienes que hacer es que tienes que ir aquí y presionar Control C para detener el proceso actual y luego ir a ese botón y ejecutarlo de nuevo. Entonces vas a ver que la app se actualiza y ya tenemos estos grandes teléfonos. Así que volvamos a ver, Quasar bajo el estilo y la identidad Entonces estábamos hablando de tipografía. También tienes otros ejemplos aquí de lo que puedes cambiar. Y así si quieres agregar otra propiedad, digamos, quieres poner este texto al centro, quieres usar texto para escribir. Entonces copia eso. Vaya a su aplicación, haga un espacio y ponga pegar la otra propiedad de estilo. Detén el código, vuelve a correr. Recargar la página. Y ves que el texto fue a la derecha. Sí, así que quería que fuera el centro. Entonces digamos centro de texto. Deja de correr otra vez. Obtenemos este pop up en algún momento que envía mensajes de texto que la app cambia, así que podemos presionar Ok, y eso volverá a cargar la página Entonces esto es lo que esperaba. Si quieres algo de relleno, así que si quieres que este texto no esté tan cerca del límite superior de la página web, entonces es posible que quieras mirar el espaciado. Entonces, en espaciado, vas a ver aquí abajo que tienes todas estas opciones. Entonces, por ejemplo, si quieres que el relleno en la parte superior sea extra pequeño, usas ese texto. Si quieres tener un relleno de todos, así que alrededor del texto, quieres tener algo de espacio aquí, espacio entre el texto y el límite superior y espacio entre este texto y el siguiente elemento, que sería este de aquí. Entonces quieres ir a tal vez relleno todo medio, así que quieres copiar eso y agregarlo ahí. Así que haz un espacio. Vuelva a ejecutar, Y ya ves que ahora teníamos algo más de espacio entre eso y aquello ahí. El último cambio que quiero hacer es que quiero hacer el texto un poco más pequeño. Controla C, corre de nuevo, ve aquí, recarga, y ahora se ve mejor Así es como haces solo por webapps. Tenga en cuenta que el orden que cree estos elementos importa. Entonces ves que el análisis, por supuesto, las revisiones están en la cima. Del otro elemento aquí. Entonces, si quieres seguir agregando elementos abajo aquí abajo, quieres respetar el orden. Entonces quieres agregar más elementos aquí y siempre no olvides que siempre necesitas conectar ese elemento a la página web. Ahora bien, así fue como crear una página web sencilla. Pero Q DF no son el único elemento que podemos usar. También podemos usar el elemento high chart, que es una gráfica que podemos agregar a nuestra página de usuario. Hagámoslo en el siguiente video. Nos vemos. 145. Cómo crear una aplicación web para visualizar datos: Hola, bienvenido de nuevo. En el video anterior, hicimos una app con Just Pi. Esta app contenía dos componentes, por lo que se les conoce como componentes en Jus Pi Entonces este componente aquí, Q Div y otro componente Q Div, ambos se agregan al componente principal, que es la página de Quasar En esta conferencia, vamos a agregar un tercer componente, que va a ser un gráfico alto, que sigue siendo un componente de Just Pi. Entonces hagámoslo paso a paso. Voy a crear una nueva Pitopla donde estaré escribiendo esta nueva app Así que vamos a llamarlo día de calificación promedio. Así que la calificación promedio por día eso es PY. Sólo voy a copiar este código porque necesitamos eso y espaciarlo aquí. Y ahora solo necesitamos agregar el componente de gráficos altos. Entonces, vamos a dar las cosas paso a paso. El primer paso por el que queremos pasar es que queremos encontrar la gráfica adecuada que necesitamos hay una muy buena manera de hacerlo. Podemos ir a la documentación de gráficos altos y mirar los ejemplos en los ejemplos de gráficos que muestran en esa página, y luego podemos elegir uno de ellos. Hagámoslo. Escojamos una gráfica que necesitemos. Vaya a su navegador y solo busque los documentos de gráficos altos en Google. Encontrarás esta página Documentación de Gráficas Altas. Así que High Charts también es una biblioteca JavaScript para producir parcelas. Así que al igual que Quasar, Quasar era una biblioteca JavaScript. No tiene relación con los gráficos altos. Y Python está consiguiendo estas dos bibliotecas, estas dos frameworks juntas, lo cual es realmente genial para nosotros, los programadores de Python, usar ambas bibliotecas modernas de JavaScript de Python Entonces aquí estamos en la documentación de gráficos altos, y queremos ir a tipos de gráficos y series. Y aquí van a ver que tenemos diferentes tipos de gráficos. Entonces en nuestro caso, creo que sería apropiado un gráfico spline Entonces, si vas y haces clic sobre el gráfico Spline, vas a ver este ejemplo aquí Se trata de temperatura por altitud. Tiene este eje de temperatura horizontalmente y este eje de altitud verticalmente. Ahora, cada gráfico proporciona el código, el código JavaScript que produce ese gráfico en particular, y puedes ver que puedes acceder a él ya sea desde el JSFiddle o el lápiz de código, que son básicamente dos editores de código en línea Si haces clic en JSFiddle, va a abrir el código que produce esa gráfica Y cada gráfica tiene su propio código. Entonces, si vas a stream graph, vas a JS v otra vez, te va a mostrar el código para ese grafo de stream. En fin, volvamos. Entonces esta es la gráfica que nos interesa, y aquí está el código que produce esa gráfica. Por lo que también puedes ver una versión en vivo de la gráfica aquí. Si cambias algo aquí , producirá esa gráfica. Pero no estoy diciendo que necesites aprender Javascript. Todo lo que tenemos que hacer es que necesites copiar el código que comienza después del coma de este contenedor aquí. Entonces eso significa que a partir de este corchete, es necesario seleccionarlo. Y baje hasta que veas esta semi columna y este paréntesis redondo, y quieres copiar hasta este corchete Entonces quieres incluir ese corchete. Entonces presiona Control C o ve ahí y cópialo y luego ve a Python. Y lo que tenemos que hacer es querer crear una cadena. Vamos a crear una variable. Digamos que la definición de gráfico es igual a una cadena. Voy a usar cotizaciones triples. Entonces seis citas, y voy a dividirlas. Entonces tres citas aquí, tres citas aquí dentro. Aquí dentro, voy a pegar todo ese código. Así que de nuevo, hay que tener mucho cuidado aquí. Este código comienza con este corchete, y luego va gráfico y así sucesivamente, y termina con este corchete. Ahora, antes de explicarte lo que estoy haciendo aquí, primero déjame que funcione rápido, y luego vuelvo al código y te explico lo que está pasando aquí. Entonces una vez que tienes la definición de código, esa es una, quieres ir aquí y digamos HC para gráficos altos, gráficos JP, C. Entonces ese es el componente que queremos usar. A igual a WP por lo que el argumento de los estándares. Y ahora, este componente de gráficos altos espera un argumento options, que es igual a esta variable, que contiene el gráfico de código JavaScript Def en mi caso Eso es. Ahora bien, si ejecuto este código, ves que la app se está ejecutando, Comando click o Control click, y esta es la aplicación web con la gráfica dentro. Entonces este fue el primer paso para obtener el código de la documentación de alta carga y pegar el código dentro de su programa Python Ahora, déjame explicarte el primer paso lo que acabamos de hacer. Entonces como te expliqué, High charts es una biblioteca de JavaScript. Por lo tanto, este aquí es código JavaScript. Pero en este caso, se trata de JSN. Entonces JavaScript usa el formato JSON y JSON es un formato familiar para Python. Entonces parece un diccionario. Puedes ver que comienza con este corchete, y luego tienes esta clave así que aunque sea una cadena, ahora, actualmente, es una cadena Python, lo que sucede cuando hacemos esto aquí es que Juspi convertirá eso en un diccionario Python Entonces un objeto real que Python puede leer y manipular. Entonces Juspi procesará este diccionario, y lo renderizará como una gráfica en la página web Te puedo demostrar que Python ha leído con éxito esta cadena como diccionario imprimiendo así que imprime las opciones de puntos HC. Entonces opciones, porque lo pasamos aquí como argumento, esto se convertirá en un atributo de HC y podremos acceder a él así. Entonces ahí voy a imprimir el diccionario, y aquí abajo, voy a imprimir también el tipo de esa opción HC, para que puedan ver de qué tipo es, y la consola C para interrumpir la instancia actual de la aplicación se ejecuta de nuevo, y nada va a pasar ahora porque aún no he cargado ninguna instancia de la página. Entonces si voy a la página y luego vuelvo aquí, van a ver que algo se imprimió ya que cuando cargué la página, ejecuta esta función de app, y por lo tanto, se ejecutan estas dos líneas. Entonces vamos a ver. Este es el diccionario, ¿verdad? Comienza ahí, termina aquí. Es el mismo diccionario que lo pegamos aquí como cadena. También vea que el tipo no es exactamente un diccionario. Es un tipo diferente de diccionario que es como un diccionario Python plus. Nos permite acceder a las claves del diccionario usando una notación de puntos. Entonces, por ejemplo, déjame mostrarte lo que eso significa. Si vas aquí a hc dot Options y vuelves a decir punto, puedes acceder a todas las claves de este diccionario. Por ejemplo, digamos que queremos cambiar el título este título aquí, ¿verdad? Para que podamos acceder a esa clave de título usando el título de punto. Y entonces este título también tiene un diccionario por su cuenta. Podemos acceder nuevamente al texto del título usando la notación de puntos. Entonces déjame hacer ese texto del título, ¿verdad? El texto del título es una jerarquía. Así que permítanme detener la instancia de la aplicación y volver a ejecutar. Ve y vuelve a cargar la página y ver qué nos imprimiremos esta vez Ya ves, tenemos acceso al valor de esa clave de texto, que era ese título. Ahora, eso nos permite cambiar el título a otra cosa como calificación promedio por día. Entonces déjame detener la instancia, ejecutar de nuevo, recargar. Y ves que el título ha cambiado a calificación promedio por día. lo que estoy tratando de llegar es que puedas cambiar todo desde esta gráfica, cualquier cosa que te guste, cualquier cosa que necesites cambiar de esta gráfica. Y, por supuesto, nuestro primer interés es cambiar los datos de esta gráfica porque actualmente, ve que la gráfica tiene esta clave seria. Y esta clave de serie tiene un nombre, temperatura y los datos. Estos son los datos que se están trazando en la gráfica. Entonces se ve un cero, 15, diez -50. Entonces ya ves, por ejemplo, 15 es una temperatura, cero es un kilómetro. Y entonces tenemos, como dije, diez -50. Por lo que a 10 kilómetros de altitud a la temperatura ronda -50 Entonces esos son los datos. Cambiemos esos datos por otra cosa. Para ello, necesitamos tener acceso a H C pero opciones serie punto. Derecha, serie. Y Series es una lista. Entonces hay que tener mucho cuidado aquí. Tienes que entender las estructuras de datos de Python, y esta es una práctica excelente, en realidad excelente para entender realmente y nivelar tus habilidades con estructuras de datos de Python como listas y diccionarios. Entonces la serie es una clave y el valor de esta clave es una lista. Y esa lista está hecha de un diccionario. Por lo que tiene un solo artículo. Esta lista y ese ítem es el diccionario. Entonces este diccionario tiene dos claves, una clave de nombre y una clave de datos. La clave del nombre tiene como valor la temperatura. La clave de datos tiene como valor esta lista. Es una lista con múltiples valores como listas como elementos. Es una lista de listas. Entonces la segunda lista, la tercera lista, y así sucesivamente. Y hasta el momento, esto nos da esta lista, bien. Y fuera de esa lista, queremos el primer ítem. Entonces ese será ítem con índice cero, derecho. Entonces cual es el diccionario. Eso significa que hasta aquí, tenemos un diccionario. Fuera del diccionario, queremos esos datos. Entonces esa ahora es esa lista. Tenemos acceso a esa lista y podemos cambiarla. Podemos establecer un nuevo valor, una nueva lista a esa lista. Por ejemplo, permítanme crear algunos datos ficticios, tres, cuatro, seis, 789 Entonces tenemos tres puntos. Déjame detener la app, correr de nuevo. R carga, y esta es una nueva gráfica. Entonces nuevamente, los datos fueron tres, cuatro, seis, siete, ocho, nueve, tres, cuatro, así que tres es la X. Entonces esto es gráfico inverso, en realidad. Entonces tres es Y, cuatro es la X. Si quieres revertir esta gráfica, si no te sientes cómodo con eso, puedes ir aquí y cambiarlo a caídas. Y también podrías cambiar estos datos directamente aquí sin tener que cambiarlos aquí a través del diccionario. Pero más adelante, vamos a inyectar marcos de datos, así columnas a partir de marcos de datos. Y esta es una manera adecuada de hacerlo. Entonces este de aquí porque nos permite trabajar con un diccionario en lugar de trabajar con una cadena. Y la cadena no es una estructura de datos diseñada para contener datos en su interior. Pero de todos modos, para cosas simples como esa, puedes simplemente cambiar los valores directamente aquí. Así invertido, lo pondré en pliegues y Detener y correr, recargar Y ahora la gráfica es diferente. Entonces ya ves que la altitud está aquí abajo. La temperatura se encuentra en el eje Y ahora. Bien, entonces escribo manualmente algunos datos aquí, pero así no es como se ve la vida real. Entonces, en la vida real, no tendrás datos en este formato. Por lo general, los tienes en un marco de datos en un archivo CSV, igual que los tenemos en nuestra app. Entonces tenemos los datos en las revisiones que CSV. Y así el formato será ligeramente diferente. Por lo general, vamos a tener algo así como una matriz X para el eje X, deberíamos mirar, digamos, tres, seis y ocho, y luego tenemos Y igual a cuatro, siete y nueve. Así que no así. Por lo tanto, nuestro objetivo es convertir esas dos listas en esta lista. ¿Cómo lo hacemos? Lo hacemos usando el objeto zip, que básicamente produce ese tipo de lista. Así que en los formatos con pares de listas. Eso espera X e Y. Entonces dos listas. Sin embargo, esta aún no es una lista. Este es un objeto zip. Te lo puedo mostrar en un shell de Python. Entonces digamos que tenemos esta lista y tenemos esa lista. Y Zp XY va a seguir siendo un objeto zip. Desea convertir ese objeto zip en una lista usando la función list. Entonces X e Y. Ahora tenemos esa lista que esperábamos. Por lo tanto, podemos obtener esa lista y usarla ahí. Ahora bien, si voy a la otra terminal aquí, detengo la app, la vuelvo a ejecutar. Recargar, y seguimos teniendo la misma gráfica con esos datos. Ahora bien, ¿y si estos vienen de un marco de datos? Así que eso nos lleva a nuestra app con nuestros datos de reseñas. Entonces déjame repasar al código en el que estábamos trabajando en Júpiter Cual es este de aquí. Entonces cargamos el marco de datos con ese código. Voy a copiar eso y pegarlo aquí arriba después de importar Jus Pi, ¿verdad Ahora tenemos este marco de datos. Y ¿qué más tuvimos para calcular la calificación promedio? Sí, teníamos este marco de datos promedio del día, que era una versión agregada del marco de datos de datos. Entonces voy a copiar estas dos líneas, y las voy a pegar aquí. Entonces el promedio del día es el marco de datos que nos interesa, y tiene un índice, que va a ser la fecha y una columna de calificación que tiene las calificaciones promedio para cada día. Entonces solo puedes refrescar tu memoria, se ve así. Derecha. Ahora, en lugar de X, tendríamos d promedio, el índice de puntos del marco de datos. Por lo que se utilizará como eje X. Y entonces para Y tendríamos calificación promedio diaria. Entonces esa columna. Entonces estas son tratadas como dos listas por ZIP, y ZIP luego las emparejamos, por lo que creará un par de fecha y calificación. Entonces, por ejemplo, lo hará en el fondo, se verá como una lista de listas, como les expliqué. Entonces la primera cita sería como 2020 133, y la calificación 4.51, digamos, contesta una, la siguiente fecha y te haces la idea Entonces probemos esto. No va a funcionar, y te diré por qué. Entonces como te dije, obtenemos una gráfica vacía y no hay errores. La razón por la que esto no funciona es que gráficos altos consideran la fecha. Entonces ese tipo de datos, los considera como categorías, tipos de datos, no números. Y en ese caso, es necesario proporcionar estos datos de otra manera. Es decir, a través de las opciones del eje X categorías de puntos. Entonces, ¿qué es eso? Bueno, el eje X en realidad está aquí. Y estamos haciendo categorías de puntos del eje X. Ahora bien, aquí no se ve una clave, pero estamos creando esa clave. Eso va a ser igual para enumerar el índice promedio de puntos. Entonces estamos convirtiendo eso en una lista y proporcionando esa lista a esas categorías. Esta es una lista de fechas. Y luego para Delta, todo lo que tenemos que hacer es convertir a una lista la columna de calificación. Déjame parar el guión y ver qué vamos a conseguir esta vez. Refresca y boom, obtenemos la gráfica que esperábamos. El gráfico es interactivo, pero ves que aquí tenemos algunas etiquetas y algunos títulos para el eje, que son del ejemplo antiguo, así que altitud y temperatura, pero podemos cambiarlos. Entonces te sugiero que los puedas cambiar directamente en el código JavaScript. Para que puedas cambiar el texto del título desde aquí. Puedes cambiar el subtítulo a partir de ahí. Entonces creo que eso es fácil de hacer en el código. Sólo para darte un resumen rápido, lo que hicimos es cargar aquí el marco de datos que necesitamos. Entonces el promedio del día es el marco de datos que contiene nuestros datos. Entonces aquí tenemos los gráficos altos código JavaScript. Entonces tenemos la función que renderiza la página web. Tenemos el componente de página web. Tenemos estos dos componentes, componentes normales, texto, QD Y luego tenemos el componente de gráficos altos, que contiene ahora este gráfico D JSON como diccionario. Entonces podemos acceder a ese diccionario a través de opciones, ya que eso se almacena en opciones. Entonces ahora HC options es el diccionario, y por lo tanto podemos acceder entonces a las propiedades de ese diccionario y cambiarlas como queramos. Y el uso más importante de eso es establecer los datos. Entonces viste que para los datos que contienen categorías, no números, puedes usar ese eje X y establecer la propiedad de esa categoría en una lista, que es una lista de fechas. Y entonces los datos son iguales a una simple lista de calificaciones. Esta es la app. Gracias por seguir. Y este fue un video largo, pero las siguientes apps van a llevar mucho menos tiempo porque ahora conoces el proceso y con algo de práctica, podrás hacer cualquier gráfica que te guste. Gracias. 146. Cambiar las etiquetas de gráficos en la aplicación web: Hola, bienvenido de nuevo. En el video anterior, construimos esta gráfica de series de tiempo calificaciones promedio que se muestran diariamente. Ahora ves que aquí tenemos algunas etiquetas no deseadas, como la temperatura aquí, tenemos kilómetros como final de las etiquetas del eje X. Entonces voy a cambiar rápidamente esto en mi código. Ahora, puedes hacerlo a través de Python usando esa notación de puntos del diccionario, o para estas cosas, te sugiero que solo revises el código JavaScript directamente. Entonces, por ejemplo, estamos hablando del eje X, y aquí tenemos altitud. Entonces el eje X en realidad debería ser fecha fecha. Entonces tenemos estas etiquetas, el formato de las etiquetas del eje X. Entonces tiene este final de kilómetro, el que ves aquí kilómetro. Si quieres algo más, solo escríbelo aquí. De lo contrario, basta con eliminarlo y dejar el valor como está. No elimine este tipo de marcadores de posición Javascript. También puedes cambiar la descripción del rango, aunque esto no se muestre en ninguna parte. Entonces seguiré adelante con la temperatura. Entonces por eso eje donde tenemos la calificación promedio. Donde más tenemos aquí este símbolo de grado Celsius. Voy a borrar eso Y tenemos este nombre de temperatura aquí, que en realidad es el nombre obtenemos aquí en la ventana emergente. Entonces la temperatura que corresponde a eso. Entonces puedes decir de nuevo aquí, calificación promedio, y luego controlar C, correr de nuevo. Y veamos los cambios. Así recargue. Sí, calificación promedio aquí, fechas aquí, calificación promedio ahí. Todavía vemos este kilómetro en el pop up. Ves 506 kilómetro. Eso es aquí en la punta de la herramienta. Entonces quieres eliminar eso y eliminar eso también. La punta de la herramienta tiene este formato de encabezado, que es un nombre de serie, por lo que la temperatura, y era la temperatura antes de ahora es la calificación promedio. Entonces ese es el nombre del punto de la serie. Y también tenemos punto punto X. Así que va a mostrar el valor X. En nuestro caso, ese es el número, entonces la columna índice, que es un número desde cero hasta algún número. Entonces el número de la fila, y esa es la calificación promedio que ves ahí. Entonces volvemos a correr y esta vez, todo debería estar bien. Y eso termina este video. Hablaré contigo en la siguiente. 147. Cómo agregar un gráfico de series temporales a la aplicación web: Hola, bienvenido de nuevo. En los videos anteriores, construimos esta gráfica diaria de calificaciones promedio. En este video, vamos a construir la misma gráfica pero semanalmente. Ahora bien, este va a ser un video corto porque no voy a explicar el código porque ya lo hice, así podrás entender fácilmente lo que estoy haciendo. Así que déjame volver al código de Visual Studio, y voy a crear un nuevo archivo. Voy a nombrar a esta F para promedio un Terrett por calificación y Semana Entonces ese es el número dos. Y lo que suelo hacer cuando construyo estas gráficas es que voy a esa plantilla de espía y la pego aquí, y luego dentro de aquí, luego creo un nuevo componente de gráficos altos que pertenecen a WP y como opciones, tiene este chart de variable, que va a ser una variable aquí dentro. Va a ser una cadena multilínea encerrada entre comillas. Entonces aquí ahora, voy a encontrar un ejemplo de gráficos altos. Entonces voy a volver a usar la spline para este gráfico semanal porque creo que ese es el tipo de gráfico más apropiado para este tipo de análisis para este tipo de visualizaciones Entonces voy a dar click sobre a JS Fiddle y eso me mostrará el código JavaScript, que es este de aquí Puedo copiar todo eso e ir a Python y pegarlo ahí y luego por supuesto, borrar esa parte. Comienza con el primer corchete antes del gráfico, y luego termina con un corchete, así que eliminaré el paréntesis de semi columna th Options apunta a esa cadena de documentos. Antes de aplicar mis propios datos, primero pruebo este código para ver si está funcionando, pero primero necesito detener el proceso actual con Control C y ejecutar Go to buy reload Sí, está funcionando. A continuación, quiero importar pandas. Entonces como ya estaba haciendo el análisis sobre Júpiter, sólo puedo copiar y pegar estas líneas Pégalos ahí. No necesitamos Mt lips puedo borrar eso. Este nuestro marco de datos. Ahora necesitamos hacer algún análisis sobre estos datos. Así que regresa a Júpiter y encuentra el análisis semanal para que esté ahí dentro El promedio semanal es el dato que necesitamos. Así que pégalos por debajo del marco de datos original y deberíamos tener el promedio de esta semana ahora. Ahora, el promedio semanal va a tener como columna índice las semanas. Entonces aquí y semana que va a ser el índice de puntos promedio semanal. Y también habrá una columna de calificación en el marco de datos promedio semanal. Entonces usemos esas dos columnas para trazar los datos. Entonces deberíamos estar accediendo a las opciones de puntos Hc punto X categorías del eje para datos categóricos como fecha Entonces ese sería un índice de puntos promedio débil, pero en forma de lista. Entonces tenemos que convertirlo en una lista por sólo por reconocerlo. Y luego HC Options eso es serio. Esos datos. Entonces lo que significa serie cero nos da este primer ítem, que es un diccionario. Entonces tenemos el diccionario aquí, y luego accedemos a la clave de datos de ese diccionario. Entonces eso nos dará en realidad el valor de esa clave, que es esta lista. Y reemplazamos esa lista por otra lista, que es una calificación promedio débil. Eso debería hacerlo. Así detener el control C Re ejecutar, recargar Esta es nuestra gráfica. Se ve raro porque tenemos que revertirlo. En realidad, originalmente se invirtió. Entonces deberíamos decir cae como un valor de Control C invertido, y re run. Recargar Y si, esto es todo. No voy a perder tu tiempo y cambiar todas estas etiquetas como hice en el video anterior. Entonces ya lo hice. Por lo tanto, esto es suficiente para este video. Gracias por seguir. Te lo diré más tarde. 148. Tramas de series temporales múltiples: Hola, bienvenido de nuevo. En este video, vamos a crear una calificación promedio por mes por gráfico de curso. Como sabrás, creamos esa gráfica ya comprada usando Júpiter y Matplot Lib. Entonces se veía así. La idea es que vamos a tener el mes en el eje horizontal y las calificaciones promedio en el eje vertical, y vamos a tener múltiples gráficas en esa área de trazado, cada una representando un curso en nuestro Y como ya sabrás, una buena manera de crear gráficas usando tablas B y altas es ir al sitio web de hig. Entonces vas por debajo de gráficos y tipos de series y nos encontramos una gráfica que sería un buen representante de nuestros datos. Entonces eché un vistazo a estos ejemplos y encontré que me gustaría usar gráfico Area Spline, que se ve así Se ve que esto tiene múltiples líneas, entonces dos, en este caso, y tiene este eje X con datos categóricos Entonces no son números, es lunes, martes, miércoles, y así sucesivamente. Y tenemos este eje número Y, entonces unidades de fruta. Y representa el consumo promedio de fruta durante una semana para John y Jane. En nuestro caso, vamos a cambiar esta gráfica y tener seis o siete líneas. No estoy seguro de cuántos cursos hay. Entonces, una línea por cada curso mostrando las calificaciones promedio de largo tiempo a lo largo de los meses. Antes de copiar los códigos, primero preparemos el ambiente. Crea el script y crea el por app y así sucesivamente. Voy a nombrar esta calificación promedio de cuatro. Esto sería, digamos que el mes del curso. Entonces calificación promedio por curso por mes que PY. Ves que es diferente a la calificación promedio del mes. Esta es una valoración promedio por curso por mes. Entonces voy a copiar esta plantilla de J Pi. Copia ahí. HC será el componente de gráficos altos, que pertenece a WP, y las opciones va a ser una definición generalmente de gráfico, que tiene que ser una variable en algún lugar de aquí. Es igual a una cadena, una cadena multilínea. Así que vamos a copiar ese código JavaScript. Entonces este de aquí, voy a copiar todo eso, pegarlo ahí, y luego justo antes del gráfico, dejamos ese corchete antes del gráfico de aquí. Dejamos eso y eliminamos la semi columna y el paréntesis Y ahora estamos listos para reemplazar los datos por nuestros datos. Pero lo que te sugiero que hagas primero es probar este ejemplo para ver si esto está funcionando ahora mismo sin cambiar los datos con tus propios datos. Lo que me gustaría hacer ahora es intentar ejecutar esto y luego visitar la URL, y vas a ver un error. Entonces Jason Decode error, identificador desconocido gráficos altos Esto sucede por esta línea. Python no puede reconocer esta expresión aquí porque se trata de JavaScript. Entonces quieres eliminar eso y solo dejar esta cadena aquí, el color del color de fondo. Y ahora, si detengo el script y vuelvo a correr, Y volver a cargar la página, deberíamos ver el ejemplo igual que lo obtuvimos de la página web de High Chart Ahora bien, estas dos gráficas son splines de área. Pero si quieres cambiarlos a spline, quieres pasar a tu código y cambiar esa spline de área a spline, detener el script, volver a ejecutar. Y recargar Y esta es la salida. Ahora estamos listos para inyectar nuestros propios datos en los datos. Entonces para eso, queremos ir a Júpiter donde tenemos listo nuestro análisis Copia ese código pégalo ahí, y también necesitamos hacer las agregaciones necesarias para extraer el mes, los cursos por mes, que es este código aquí, y eso nos da este marco de datos Ahora, refresquemos nuestra memoria cómo se veía el marco de datos. Entonces puedes imprimirlos aquí y ejecutar el script, recargar la página y ver lo que te imprimieron en la terminal, o puedes ver la salida de Júpiter Entonces, lo que prefieras, sólo voy a ejecutar el guión aquí. Y así conseguimos imprimir el marco de datos incluso antes de cargar la aplicación web porque se imprimió porque la aplicación web está dentro de la función, así que esto es solo en el espacio de nombres global, en el ámbito global Entonces cuando se ejecuta el script, estos se ejecutan. Si esto estuviera dentro de la función aquí, solo se ejecutaría cuando carguemos la página. Y este es el marco de datos. Por lo que tiene este índice de mes, y tiene diferentes columnas. Entonces esta es la primera columna. Entonces tenemos más columnas, que aquí no vemos. Y entonces la última columna es esta y los valores de cada columna. Entonces el nombre de una columna, los valores de esa columna, que son las calificaciones promedio. Y tenemos un mes por cada fila. Así que esto es julio de 2019, agosto de 2019, enero de 2021. Así que las columnas de índice. Veamos ahora ¿cómo inyectamos esos datos en estos datos? Entonces vemos que XXIs tiene estas categorías con estos días de la semana Así que ahora podemos hacer lo mismo. Aquí abajo, decimos hc punto opciones punto XXI. Entonces XXs es la clave del diccionario principal. Por lo que se expone directamente en el primer nivel. Entonces título de gráfico, eje de leyenda. Y luego tenemos el segundo nivel. Por lo que la categoría es parte del eje. Por lo tanto, podemos acceder a él así que categorías es una lista, como puedes ver aquí. Por lo tanto, necesitamos reemplazarlo por una lista lista al mes CRS promedio Entonces ese es nuestro índice de puntos de marco de datos. Entonces esa columna de ahí, 20185, 20186 y así Derecha. Esa fue la parte fácil. Ahora vienen los datos. Entonces, lo que necesitas hacer es entender la estructura de los datos. Ese es el primer paso muy importante. Así que la serie es una clave de primer nivel. Por lo tanto, podemos decir opciones de Hc, eso es serie, correcto. Entonces esto nos dará esa lista. Entonces esa lista tiene ¿ cuántos artículos tiene? Veo un diccionario de ahí arriba hasta aquí. Ese es un diccionario que tiene este nombre John par de clave y valor. Entonces el nombre es la clave, John es el valor. Entonces tenemos este otro dato clave y una lista, y el diccionario termina ahí. Y luego tenemos el otro diccionario. Entonces es Jane How y estos son los datos para Jane. La lista está hecha de diccionario, y cada diccionario representa una línea en el gráfico. Entonces eso es para Jane y eso es para John. Por lo tanto, lo que tenemos que hacer es que tenemos que tener aquí. Entonces ese sería el nombre de un curso. Digamos que el primer curso serían 100 ejercicios de Python, y así sucesivamente, todo el título. Y entonces los datos contendrían una lista de calificaciones promedio para ese curso en particular. Entonces esa, esa, esa, y así sucesivamente. Y entonces tendríamos que repetir ese proceso para cada uno de los seis o siete cursos que tenemos aquí. ¿Cómo lo hacemos? Bueno, podrías hacerlo manualmente. Como a lo mejor podrías inyectar así de series, dirías la primera trama, así que eso te daría el primer diccionario. Esa expresión es el primer diccionario. Entonces podríamos acceder a nombre y reemplazar eso a tal vez el mes promedio de columnas de puntos CRS Entonces esa sería la primera columna y así sucesivamente. Eso estaría bien, pero no es un proceso automático. Entonces, cuando haces trabajo manual, esa es una señal de que no estás programando de la manera correcta. Lo que tenemos que hacer en cambio, es que necesitamos crear esta lista completa dinámicamente. Y este es un punto muy, muy crucial ahora en el uso de gráficos altos, pero también en saber manipular estructuras de datos en Python. Entonces esta es una excelente práctica. Estoy muy contenta de que esto saliera. Una gran práctica para ti. Entonces déjame mostrarte cómo puedes construir esta lista a partir de este marco de datos. Entonces antes de hacer eso, antes de asignar la lista, queremos construir la lista. Así que vamos a nombrar a este subrayado HC Delta. Y eso es igual a. Entonces necesitamos crear una lista. Entonces esa es una lista. Por lo tanto, escribimos corchetes. La lista está hecha de diccionarios. Por lo tanto, escribimos llaves. Y luego dentro de cada diccionario, tenemos una clave de nombre. Siempre tenemos esa clave de nombre y una variable para esa clave de nombre. ¿Por qué estoy diciendo variable? Bueno, porque el nombre siempre es nombre, entonces es una constante. Por eso estoy duro codificando que siempre deberíamos tener nombre ahí. Pero el valor del nombre es una variable, por lo que está cambiando cada vez. ¿Y entonces qué más? Tenemos ese par, bien. Dentro del diccionario, ese diccionario. Entonces ese diccionario tiene otro par. Entonces los datos y la lista. Entonces vamos a escribir eso. Como Data, la cadena, una columna, y tenemos una lista. Esa lista es básicamente representativa de cada una de las parcelas, cada una de las siete parcelas que vamos a tener para cada curso. Entonces lo que significa que esa lista va a ser estas calificaciones. Por ejemplo, vamos a tener la primera lista siendo la primera columna, por ejemplo, para Python ejerce una para ese curso, esta columna como una lista ahí y luego la otra columna. Después de ese curso, el siguiente y el siguiente y el siguiente. Entonces una columna por cada curso, y V uno va a ser reemplazada por el título de la columna. Entonces antes de escribir la expresión dentro de esta lista, quiero terminar primero la comprensión de la lista superior porque aquí tenemos dos comprensiones de listas Tenemos el primer nivel uno, así que llamémoslo el nivel superior. Aquí estamos construyendo diccionarios. Entonces es una lista hecha de diccionarios así que eso significa que deberíamos decir aquí para V uno en el mes promedio CRS tat columnas Entonces, lo que es es una lista que contiene siete cadenas, una cadena para cada título del curso. Entonces va a ser una lista que contenga 100 ejercicios Python uno, evalúe y mejore tus habilidades, luego el otro título del otro curso, y así sucesivamente, es una lista de estos títulos. Lo que estamos haciendo es que estamos inyectando aquí un título, el primer título de esa lista en la primera iteración, luego el siguiente título de ese mes la lista promedio de columnas CRS en la siguiente Y así uno, vamos a tener siete iteraciones o seis, cualquiera que sea el número de cursos que acertemos Pero entonces, dentro de aquí, tenemos una iteración anidada, una comprensión de lista anidada, perdón, que es esta Y eso será, nuevamente, escribamos otra variable, como V dos para V dos en CRS promedio mensual Hm. Entonces, ¿qué va a ser esto? Bueno, tiene que ser esta columna, ¿no? Entonces, ¿cuál es esta columna? ¿Cuál es el nombre de esta columna? Bueno, para este curso es que es el nombre de la columna. Entonces aquí necesitamos anotar el nombre de la columna. Verás, esta es una sintaxis de Pandas. Entonces escribes el nombre de la columna, pero tenemos diferentes nombres de columna. Entonces lo que entramos aquí es V uno. Porque V uno va a ser el título actual en la comprensión de la lista de nivel superior Entonces básicamente lo que hará Python es, mientras está iterando el primer título, va a detenerse en esa primera iteración de nivel superior, y va a iterar a través de esa columna en particular a través esa columna en particular estas calificaciones para 100 ejercicios de Python uno Y construirá esa lista una vez que termine con todos estos números, construye esa lista, luego va la otra a la segunda iteración en la iteración de primer nivel En la segunda iteración de las otras columnas, que va a ser el siguiente curso Y así sucesivamente, espero que quede claro. Derecha, entonces lo que queda por hacer es que necesitamos asignar esta nueva lista, así que inyectarla a nuestros datos porque la creamos, pero no la hemos conectado a HC. Entonces es solo una variable flotando ahí en nuestro script, sin conexiones con las otras partes. Entonces lo que tenemos que hacer es decir que esa, esa lista es esa lista. Entonces tenemos que asignarlo a Series, ¿verdad? Opciones Ct serie punto, igual a datos HC. Derecha. Ahora voy a detener el guión y ejecutar y visitar la aplicación. Y esta es la salida. Aquí está el eje X con el mes, y esta es nuestra calificación desde 2.5 hasta 5.5. El máximo está en algún lugar de aquí. Entonces puedes sobre tu mouse ahí y ves las calificaciones de cada curso, ¿verdad? La leyenda aquí está flotando. Entonces, si quieres cambiar eso, puedes volver a tu código y localizar las leyendas aquí. Entonces tienes algunos parámetros aquí con los que puedes experimentar. Pero si pongo flotante a caídas, Eso debería cambiar la vista de la gráfica. Entonces creo que esto es más claro. Ahora bien, no estaría de acuerdo en que este tipo de gráfica sea la mejor representación para este tipo de datos porque aquí tenemos múltiples líneas, pero están muy cerca una de la otra. Así que no hay muchas variaciones entre un curso y otro. Creo que estas splines serían más representativas si tuviéramos en lugar de promedios, tenemos el recuento de las revisiones de las calificaciones que quedan para cada curso, lo que significa que tenemos que ir a la sección de procesamiento y decir aquí, contar en lugar de media Y déjame probar eso. Hmm. Entonces sí, se ve mejor, creo. Tenemos más variación, más diferencia entre esta parcela y las demás. Aunque los otros aún no son tan visibles, ya que esta gráfica aquí está tomando gran parte del rango del rango del eje Y. Por lo tanto, lo que voy a hacer a en el siguiente video es que voy a usar otro tipo de gráfica para representar exactamente los mismos datos. Promedio de calificaciones por curso, por mes, pero usando una gráfica de flujo. Te hablaré en el siguiente video. 149. Creación de múltiples streamgraphs de series temporales: Hola, bienvenido de nuevo. En este video, vamos a crear esta gráfica de stream. Para que lo puedas encontrar en el sitio web de hichart.com bajo tipos de gráficos y series Así que baja a Stream graph. En el eje X de esta gráfica en este ejemplo, tenemos los años, por lo que es un tiempo X eje datos categóricos En el eje Y, tenemos el número de medallas ganadas por los deportistas, y cada color representa a un país. Por lo que cada país tenía un número particular de medallas ganadas por sus atletas para un año en particular. Ahora vamos a tener la misma gráfica, entiendes la idea. Tenemos los meses a lo largo del eje X y cada color representamos un curso y luego podemos tener ya sea las calificaciones promedio o el número de calificaciones en el eje Y. Antes de copiar el código JavaScript de esta gráfica, vamos a preparar nuestro entorno. Voy a duplicar esto copiándolo y solo presione Control V para pegarlo. Lo duplico y voy a renombrarlo a otra cosa cinco. Vamos a llamarlo stream. Derecha. Después ve al archivo que acabamos de crear. Y todo lo que tenemos que cambiar desde aquí es esta definición de gráfico, eliminar eso e ir aquí, seleccionar todo eso, Control A, Control C, copiar, ir aquí, Control V para pegarlo, y no olvides quitar el carácter innecesario, así el semiclumn el paréntesis, y aquí arriba necesitamos gráficos y necesitamos el paréntesis y aquí arriba necesitamos gráficos y necesitamos los gráficos Entonces todo antes de ese corchete se borra, así. Entonces echemos un vistazo ahora a estos datos. Sí, cómo se construyen los datos. Así que la serie es una lista. Es una gran lista que contiene múltiples diccionarios. Entonces, por ejemplo, este es el primer diccionario. Comienza aquí. Termina aquí dentro. Y está hecho de este par de claves y valores y nombre y el nombre del país, que será sustituido por el nombre de un curso. Y tenemos datos, que es esta lista. Y así estos diccionarios luego se repiten una y otra vez con diferentes datos. Eso significa que no tenemos que cambiar nuestro código aquí abajo. Entonces teníamos este código. La construimos ya en el video anterior. Entonces eso debería estar bien. Intentemos ejecutarlo. Vamos a obtener un error, y vamos a arreglarlo. Entonces, detenga el proceso actual si hay un proceso en ejecución. Asegúrate de que estás ejecutando el nuevo archivo que creamos. Así que presiona Run. Entonces este es el error. Y cuando obtienes este error de decodificación de Jason, eso significa que se trata de ese código JavaScript que tenemos Entonces queremos ir a los códigos, y ves que se trata de colores e identificador desconocido porque lo que tenemos aquí son estos colores, y necesitamos eliminarlos. Y puedes eliminar todos los colores. Entonces de ahí para acá, incluyendo la coma, porque Python no está siendo capaz de usar esos colores Así que borra eso, y eso no va a cambiar ningún resultado. Y déjame mostrarte. Tenemos otro Peto. Sí, entonces está aquí. Entonces tenemos este tipo de sintaxis JavaScript que Python no es capaz de reconocer. Entonces lo que podrías hacer es, ya que estamos reemplazando esto de todos modos, lo siento, puedes eliminar todos los valores de la lista de categorías y dejar categorías una lista vacía. Así que al igual que esas categorías. Entonces las categorías están siendo reemplazadas, como ustedes saben, aquí abajo a través de esta expresión. Déjame parar de nuevo y correr. Esta vez parece estar funcionando. Entonces estos son en realidad el número de calificaciones que quedan para cada curso, por lo que te muestra la diferencia entre este curso, el mega curso de Python y los otros cursos. Y esto es algo interesante aquí. Entonces ya ves que este nuevo curso acaba lanzado no hace mucho tiempo en algún momento del 20 21 de enero Así que el curso completo de Python construyó diez aplicaciones OP profesionales, y los gráficos altos son muy inteligentes para ajustarlo dentro de este gráfico de flujo. Ahora, es posible que desee cambiar estas etiquetas para que pueda encontrarlas fácilmente. puedes localizar donde están aquí para que pueda realizar una búsqueda Alemania, que es este texto aquí. Entonces es parte de las anotaciones. Ya ves, se podría decir, por ejemplo, por ejemplo, curso lanzado o Python se hizo popular. Derecha. Si lo detengo y vuelvo a correr. Deberíamos ver estas etiquetas actualizadas. También puedes actualizar su ubicación. Entonces por ejemplo, ya ves, con la primera anotación, está en X 5.5, y 30. Entonces X 5.5. Entonces cero aquí, uno, dos, tres, cuatro, cinco, seis, entonces es 5-6. 5.5 30 a lo largo del eje Y. Así que 30 deberían estar en algún lugar de aquí. Entonces entiendes la idea. Con eso concluye este video, y voy a platicar con ustedes en los siguientes. 150. Agregar un gráfico de torta a la aplicación web +: Hola. En este video, vamos a crear un gráfico circular, igual que el que estás viendo. Así que puedes encontrar esto desde p, ir a Tipos de Chart y Series e ir a Phart Este de aquí muestra el porcentaje de usuarios de los principales navegadores de Internet. Por ejemplo, Chrome tiene la mayoría. Ves estas grandes rebanadas aquí y cada rebanada está asociada con el porcentaje. En nuestro caso, lo que vamos a tener es que hicimos este análisis antes, así que tenemos estos datos. Para cada curso, nos queda un número de calificación para ese curso. Por lo tanto, vamos a terminar con algo como esto, pero interactivo, como puedes ver aquí. Vamos a preparar nuestro entorno. Entonces voy a crear un nuevo archivo de calificaciones por supuesto. Es un pi. Y como de costumbre, usaré esta plantilla, esta plantilla Pi y luego agregaré un componente de gráfico alto que pertenecía a WP y renderizaré este código JavaScript, que tenemos que pegar aquí. Entonces aquí dentro va el código de esta tabla. Entonces esa de ahí. Controla A, cópiala y péguala ahí, y no olvides eliminar la semi columna el paréntesis y en la parte superior aquí, borra todo lo que esté antes de ese corchete Me gustaría probar el código antes de hacer cualquier cambio. Pero aquí tengo este error. Hay cuatro códigos. Tengo que quitar uno y luego correr Y así conseguimos que el gráfico circular se visualice correctamente A continuación, quiero que ese código se pegue en la parte superior aquí. Y también, queremos tener esta agregación del marco de datos donde básicamente estamos contando cuántas calificaciones hay para cada curso. Entonces calificación del nombre del curso. Cuente eso. Derecha. Después a continuación, tenemos que mirar la estructura de los datos. Entonces, como puedes ver, esta es una lista grande con diccionarios. Entonces aquí está el primer diccionario, pero ten cuidado aquí. lo que veo, lo que tenemos aquí es este diccionario que tiene esta clave y valor, esta clave y valor, y luego esta clave y ese valor, que es una lista. Entonces termina aquí. Por lo tanto, esta vez, lo que tenemos que hacer es acceder a hc dot options dot serious dot data. Así que a diferencia de las otras veces en las que hicimos hc options dot series, porque los datos fueron directamente después de Series. Serie era la lista. Pero esta vez, Series tiene una clave de datos, y esa clave de datos contiene los datos reales, que están hechos de diccionarios. Entonces el primer diccionario con nombre e Y, el segundo diccionario con nombre y por qué otra vez. El primer diccionario también tiene estas otras propiedades como rebanadas y seleccionadas a través, lo que indica que Uh, este cromo es rebanada. Verás, está separada por las otras rebanadas del pastel. Entonces eso es para el cromo. Los otros no tienen esas propiedades, lo cual está bien. Así que sólo voy a dejarlo así. Pero cada uno de ellos tiene un nombre y una Y. Por lo tanto, esto será igual a algo, y ese algo es algo que necesitamos construir ahora. Entonces los datos de HC serán que eso es una lista. Es una lista de diccionarios, derecho. Una lista de diccionarios que tienen un nombre igual a vamos a encontrar un nombre para una variable V uno, ¿verdad? Y entonces así nombre e Y, la etiqueta del otro valor es Y. Vamos a tener una variable V dos. Entonces como estos siempre cambian opera aquí, QQ aquí, así que ve explorador ahí, eso significa que necesitamos una variable después del nombre y también una variable después de Y ya que estos valores también están cambiando Y lo que estamos haciendo es que estamos construyendo una comprensión de listas Entonces para V uno y V dos pulg. Entonces, ¿de dónde sacamos esto? Básicamente, necesitamos para V uno, necesitamos los nombres para cada curso, los títulos de los cursos. Y para V dos, necesitamos el número de calificaciones para el curso. Entonces echemos un vistazo al marco de datos, cómo se ve, compartir. Entonces creo que el índice tiene el nombre del curso. Déjame mostrarte en realidad que tú. Ejecutaré esa celda y ejecutaré eso también. Entonces obtenemos esto, pero compartir ese índice es básicamente una lista como objeto, que contiene todos los nombres de los cursos. Y share realmente list share contiene el número de calificaciones. Lo que vamos a hacer es que estamos haciendo para V uno, V dos en Zip compartir índice de puntos, compartir imprimir V uno, V dos. Y lo que está pasando aquí es que en la primera iteración, eso va a imprimir V uno, el título del primer curso y el número de rating que queda para ese curso Entonces v1v2 luego v1v2 una y otra y otra vez. Eso es lo que necesitamos aquí. Entonces para v1v2 en Zip comparte lo siento, comparte índice y Entonces esos valores van a ser inyectados en aquí y aquí en este diccionario. Y luego le asignamos eso a esto, y luego detenemos el script y lo ejecutamos nuevamente para ver dónde estamos. Entonces obtenemos un error. El objeto de lista de atributos no tiene datos de atributo. Entonces vamos a echar un vistazo a donde ocurrió el error, una línea 84, que está aquí. Y dice objeto List no tiene datos de atributo, lo que significa que este es el último objeto, y este es el atributo data. Ya que esa es una lista, claro, no tiene este atributo de datos porque pensamos que se trataba de un diccionario. De alguna manera pensé que tal vez no lo hiciste. Tan grave. Hmm. La serie es realmente una lista. Entonces eso fue un error lógico por mi parte, pero de eso se tratan los errores. Entonces te explican lo que está pasando. Lo lees y arreglas el problema. Entonces como la serie es una lista, significa que tiene ítems, y en este caso, solo tiene un ítem. Entonces es el gran diccionario el que tiene esta clave y valor, esa clave y valor, y ese valor clave. Por lo que la lista de series tiene solo un ítem. Por lo tanto, necesitamos acceder a ese único ítem. De series, por lo que el ítem con índice cero, que luego nos dará este diccionario. Y de ese diccionario, extraemos la clave de datos de ese diccionario. Entonces, al extraer datos accediendo a la clave de datos, obtenemos la lista de la clave de datos. Entonces ahora deberíamos estar bien. Oye, se ve bien. Y eso también termina este video, y esa fue una serie de gráficas que desarrollamos a lo largo de estas secciones. Quiero darle las gracias por seguir, y hablaré con ustedes en los próximos videos. Nos vemos. 151. Demostración de la aplicación 5: desarrollo web con Flask: cómo crear un sitio web personal: Hola, y bienvenidos a esta nueva sección del curso. Y esta es la primera conferencia donde te voy a dar una demostración de lo que vas a estar construyendo en esta sección. Entonces esta es una de esas secciones del curso donde vas a construir una aplicación. Esta aplicación en particular es un sitio web con Python. Python puede construir sitios web, igual que otros lenguajes de programación. Por supuesto, necesitas HML y es posible que necesites CSS y JavaScript también para que el sitio cliente represente la página web en el navegador Pero en el back end, usas Python, igual que lo haces con PHP y otros lenguajes de programación. Sí, el sitio web que vas a construir es este de aquí que ves. O sea, está bastante vacío por ahora, no tiene ningún contenido, pero puedes llenarlo contenido y usarlo como escaparate para tu trabajo, como portafolio o cualquier cosa. Así que una vez que llegues a este punto, podrás mejorarlo con Easy. También debes saber que este sitio web ya está en vivo, así que te enseñaré a implementar un sitio web en un servidor en vivo para que todos puedan navegar y visitar tu sitio web. Entonces es un completo tutorial para construir el sitio web desde cero y hacer que funcione en línea. Y ahora este es un sitio web estático. Pero más adelante en el curso, tenemos otras aplicaciones donde estarás construyendo sitios web más dinámicos con base de datos en el back end y también algunas características dinámicas. Pero este es un gran punto para comenzar. Entonces espero que disfrutes de esta sección, y si tienes dudas, no dudes en preguntar. Y sí, hablaré contigo en la próxima conferencia. 152. Tu primer sitio web de Flask con advertencia de servidor agregada: Hola. Y en esta conferencia, construirás tu primer sitio web con FRASK si aún no lo has hecho. Flask es un framework Python que tiene todas las herramientas y las plantillas y las funciones para que construyas sitios web con Python. Y antes de profundizar en FAS y explicarte cómo usar FRASK probablemente para construir aplicaciones web Python, me gustaría que dedicaras 3 minutos a construir un sitio web muy básico con Flask. Y eso se hace con sólo varias líneas de código Python. Entonces eso es lo que vamos a hacer ahora mismo. Para construir una aplicación web con FLASK, es necesario tener instalado Flask. Por lo que PIP install Flask debería instalar Flask en su entorno Python Todo bien. Eso se instaló con éxito. Y vamos a crear nuestro sitio web ahora. Lo que necesitas es un archivo Python. Entonces estoy creando uno aquí. Digamos, guión uno no pastel. Y entonces aquí es donde escribes el código que construirá tu aplicación web, y todo comienza desde la importación de Flask. Y en realidad, no importas el framework flask, sino que importas la clase flask de un framework flask. Así que a partir de matraz de importación matraz. Y Flask es una clase de esta biblioteca, y esta contiene todos los prototipos que necesitas para construir aplicaciones web con Python Por lo que esto se encargará de las solicitudes por usted. No tienes que configurar las solicitudes tú mismo. Pero vamos a centrarnos en este ejemplo por ahora. Una vez que lo hagas, necesitas crear una variable donde almacenarás tu instancia de objeto Flask, tu aplicación Flask. Eso sería igual a la clase FLASK. Y pasa ahí la variable nombre, no te preocupes por eso ahora mismo. Entonces necesitas un decorador, root, y aquí tienes una URL donde verás tu sitio web Entonces este corte aquí significa la página de inicio. Y justo después de eso, necesitas escribir la función, la función Python. Y esta función es la que define lo que hará tu página web. En este caso, devolveremos una cadena. Digamos cadena aquí. El contenido del sitio web va aquí. Justo después de eso, necesitas dos líneas de código más, y esa es una declaración condicional. Si el nombre es igual a cadena principal app dot run. Depurar es igual a True. Eso es. No te preocupes por esto ahora mismo. Simplemente haga clic en Guardar, abra la terminal y ejecutor script con Python script one, Python Y parece que tu aplicación web se está ejecutando ahora, así que abre el navegador. Y tu sitio web debe estar en vivo en tu host local. Eso es. Nada impresionante, pero ves lo fácil que es crear un sitio web con Python. Y en este caso, apenas estamos devolviendo un engranaje de cuerda al sitio web. Entonces no hay nada elegante ahí dentro. Pero más adelante, te explicaré cómo puedes devolver páginas HTML en lugar de tocar cadenas Python a tu sitio web. Eso te permitirá tener realmente diferentes formatos, diferentes fuentes en tu texto, y luego también puedes aplicar estilo CSS a tu HTML, y así tendrás un sitio web completo con características modernas. Por ahora, asegurémonos de entender estas siete líneas de código. Sí, son siete líneas. Como dije, la primera línea, está importando el objeto de clase FAS de la biblioteca FAS. Entonces en la siguiente línea, una vez que haya importado aquí la clase flask, el objeto flask, es decir, estás instanciando esa clase, ese Esta aquí es una variable especial que obtendrá como valor el nombre del script Python. Ahora, cuando ejecutas un archivo Python, un script Python, Python asigna el nombre principal de esta cadena al archivo Cuando importas un script a otro script, como si importáramos este script desde otro script, este script se le asignará al script un nombre de punto py. Pero cuando ejecutas este script, Python asigna el nombre guión bajo guión bajo, guión bajo puntaje principal Entonces, ¿qué pasa es eso? En esta línea, decimos que nombro es igual a principal, luego alrededor de la app. Esto es cierto cuando ejecutamos el script como lo hicimos aquí. Pero si importáramos este script de otro script, esta línea aquí no sería ejecutada. Así que esto nos permite tener control sobre este script usando esta línea aquí. Entonces tenemos estas dos líneas. Se trata de un decorador. Ahora, la salida que produce esta función se mapeará a esta URL. Entonces si quieres, puedes cambiar esta URL a esta, por ejemplo, guardar el script. Seguro, necesitas una URL aquí. Guarde el script, ejecute y vaya al host local, vuelva a cargar. Y esta vez obtendrás un error. Python no pudo encontrar esta página, pero puede encontrar la página acerca de. Sí, eso es. Si aún quieres homepage, agregas otro decorador y otra función justo después del decorador Así que solo vete con esta página de inicio y solo di homepage. Aquí. Guardar. Nuevamente, tenemos un error porque no podemos tener funciones con el mismo nombre. Para que podamos cambiar esto a un bot. El nombre no importa. Entonces esto no tiene por qué ser lo mismo con este. Vuelva a hacer clic en Guardar en el guión. Y ve a la página web. Esto está funcionando. Prueba la web en la página principal. Esto también está funcionando. Si quieres cambiar algo, digamos sobre el contenido va aquí, guardas el guión. Y la aplicación web se reiniciará por sí sola para que no tengas que cerrar la aplicación web y volver a ejecutar el script como lo hice antes. Si obtienes un error como el que obtuve anteriormente, el guión se detendrá. Pero si todo está bien, no obtendrá un error, así que inténtelo de nuevo. Página principal está bien. Acerca de la página está bien, también, y con el nuevo contenido. Entonces eso es todo. En la siguiente conferencia, aprenderás a devolver una plantilla HTML, un archivo HTML usando tus funciones de Python. Eso te dará todo el poder para publicar cualquier cosa que quieras en tu sitio web y no solo tocar cuerdas como hicimos en esta conferencia. Entonces te veremos en la próxima conferencia. 153. Preparación de plantillas HTML +: Bienvenida otra vez. En esta conferencia aprenderás a generar páginas HTML usando tu Python Web App. En la conferencia anterior, simplemente devolvemos algunas cadenas lisas, como ves aquí, así que devolvemos una cadena. Ahora vamos a devolver una plantilla HTML aquí. Para ello, necesitamos usar el método de render template de la biblioteca Flask. Y lo que hace la plantilla de render es acceder a un archivo HTML, almacenado en algún lugar de nuestra aplicación Python, en nuestros archivos Python, luego mostrar ese HTML todas las solicitudes en URL. Entonces necesitamos reemplazar esto con el nombre de una página HDML, digamos home dot HTML Y este nombre aquí, este nombre de archivo tiene que reflejar un archivo HTML real, que tiene que ser almacenado en una carpeta, que a su vez tiene que denominarse plantillas. Así que asegúrate de usar estos nombres cuando crees una carpeta. Dentro de la carpeta, entonces necesitas crear un archivo HTML, home dot HTML. Y el nombre tiene que reflejar el nombre que estás regresando aquí en el método de la plantilla Eder. Eso es. Y aquí es donde escribes el código HML ahora Si ya conoces HTML, esto debería ser tan fácil como respirar. Si no lo sabes, entonces debería ser fácil de aprender. Si conoces un poco de Python ahora, que deberías aprender HTML es solo una brisa. Así que solo sigue ahí y aprende algo de HTML. Así de fácil. Pero de todos modos, voy a crear un archivo HTML aquí. Todo comienza con una declaración del tipo de documento, HTML. Entonces tienes las etiquetas HTML. Había una etiqueta de apertura, y también tienes una etiqueta de cierre. Eso es. Tienes etiquetas corporales. Así como así, y aquí dentro va el contenido de tu página web. Digamos que quiero una rúbrica como esta. Y dentro de aquí, puedes poner algo de texto. Mi página de inicio, por ejemplo. Y aquí hay otro tipo diferente de etiqueta, que es una etiqueta de párrafo, y digamos que este es un sitio web de prueba. Clicksaf y, si, deberías estar bien para ir. Ve a tu guión, asegúrate de haberlo guardado. Y la web se está reiniciando, y voy a ir ahora a visitar mi página principal Esta es la página del bot. Esta debería ser la página de inicio, cómo. Parece que tengo un pequeño errateo aquí, supongo. Sí, esta debería ser la página uno como etiqueta de apertura. Haz clic en Guardar y no tienes que volver atrás en el script de Python. Solo ve aquí, vuelve a cargar la página. Y este es un texto normal ahora. Entonces este es un párrafo, y esto va encabezando Genial. Por lo que también podemos tener otra página para la página Acerca de. Si quieres simplemente duplicar esto rápidamente, di sobre mi página Acerca de. Aquí, este es un sitio web de prueba. De nuevo, así como así, vas a tu script uno y cambias esto para renderizar plantilla, y ahí pasas sobre el HTML de punto. Haga clic en Guardar, vaya al anfitrión local. Esta debería ser la página principal. Tienes la página Acerca de. Sí, mi página Acerca de. Esta es esta página web otra vez. Entonces, eso es todo. Así es como pasas las plantillas HE Mel a tu aplicación web Python, y así es como las mapeas a tus URL Pasemos, luego a la siguiente conferencia. 154. Cómo agregar un menú de navegación de sitio web: Bien, en esta conferencia, voy a seguir trabajando en el sitio web. Y específicamente, estaré agregando un menú de navegación para que el usuario pueda navegar fácilmente por las páginas. Permítanme ilustrar primero la idea. Al principio, me gustaría ejecutar lo que tenemos hasta ahora. Entonces Python script uno. Por lo que la aplicación se está ejecutando. Y si vas a tu navegador, host local, el puerto predeterminado es 5,000, y este es el sitio web. Y también tenemos dos páginas aquí. Acerca de la página. Bueno. Así que sobre la página y la página de inicio. Ahora bien, lo que voy a construir en esta conferencia es esta cosa de aquí. Tengo una captura de pantalla. Entonces la página de inicio, la página Acerca de, inicio, la página Acerca de. Entonces lo que tenemos es un menú de navegación aquí, que si haces clic en uno de estos textos aquí, vas a la página específica. Y también tenemos un encabezado y algo que debes notar ahora, lo que es importante notar es que esta parte aquí es la misma en ambas páginas. Eso significa que vamos a añadir esta parte aquí, el código de esta parte en la página HML ¿Cómo suena eso? Bueno, a no me suena muy inteligente. Una forma más inteligente de hacer esto sería crear una página HML separada para esta parte aquí, y luego vincular la página A y la página principal a esta página Entonces eso es lo que vamos a hacer en esta conferencia. Entonces necesitamos tener el código HTML para este encabezado y el menú de navegación. Y ya tengo ese código, así que no voy a ir a escribir todo el código HTML. Aquí. Todo bien. Pero te voy a explicar lo que hace el HTML. Entonces, antes que nada, me gustaría hacer doble clic en esto y simplemente mostrarlo localmente. Entonces no estamos ejecutando esto en un servidor, doble clic en él. Entonces tenemos el encabezado aquí y el menú de navegación, que si haces clic, no vas a ningún lado porque aún no hemos vinculado el layout de esa página HTML con A y la página de inicio. Y como pueden ver, pongo esto dentro de la carpeta de plantillas. Así que cada página de HML va a la carpeta de plantillas. Entonces lo que tenemos aquí es que tenemos la declaración del documento y tenemos las etiquetas HTML el cierre aquí. Entonces tenemos un elemento header, y este contiene DF aquí. Y luego usaremos este nombre de clase para referirnos desde nuestro código CSS. Entonces tenemos aquí una función que dice URL cuatro. Y lo que esto hace es que esto activará la función home, la función Python. Que tenemos aquí. Entonces esta de aquí, esta función se activará cuando el enlace de inicio sea clicado por el usuario Entonces este de aquí. Y así lo mismo para el ab. Entonces, cuando el usuario haga clic sobre, se ejecutará la función Python y se renderizará el acerca de ese archivo HTML a través del método de plantilla de renderizado. Entonces espero que quede claro. Si eres perezoso como yo, no quieres escribir cada línea de este archivo, puedes encontrar este archivo en la sección de recursos, que está a la derecha de la pantalla. Ahora necesitamos encontrar una manera de vincular este archivo HTML de diseño con la página de inicio y las páginas HTML anteriores. Rápidamente volveré a cómo se ve la página. Y así como ves aquí, tenemos el encabezado, y justo abajo del encabezado, tenemos la página A HTML. Entonces justo aquí. Eso significa que justo debajo del encabezado, ingresaremos algún código que enlazará a la página HTML del punto de inicio o a la página HTML de A punto dependiendo de lo que haga clic el usuario. Y así tenemos una división aquí, cerrándola. Y le voy a dar un nombre de clase para que pueda referirme más tarde al código CSS. Entonces tienes corchetes. Entonces esa es una sintaxis, y también que usar el signo porcentual ahí. Después escribes la etiqueta de bloque, y luego le das un nombre al bloque. Y lo que estamos haciendo aquí es en realidad herencia de plantillas. Entonces la página HML de punto de diseño, que estamos modificando en este momento, es una plantilla base La plantilla hijo será la página HML de punto de inicio o la página HTML de punto acerca Y esta plantilla hijo llenará este bloque aquí. Hay otra línea dentro de corchetes de curling y signos de porcentaje también Esa es la palabra clave end block, que indica el final del bloque. Y ya terminamos con la página HML de maquetación. Lo que voy a hacer aquí es ir a Panes y dividir la ventana a la derecha. Entonces tengo la página HTML de punto de diseño aquí, ciérrela aquí. Y voy a ir a la casa punto HML ahora. Y como esta será una plantilla hijo, no necesito la declaración aquí y la etiqueta HTML, y ni siquiera necesito la etiqueta body. Voy a reemplazar esto con un DIV. Y digamos que clase es igual a Inicio ciérralo aquí y borra estos dos. Y lo que tienes que hacer ahora es volver a usar la sintaxis de plantillas, así y usar la palabra clave extends Y luego declaras lo que quieres extender. Extiende ese archivo HML. Entonces también necesitas otra línea. Y aquí hay que especificar el nombre del bloque. Entonces esto necesita corresponder con este de aquí. Y entonces, ¿qué está pasando aquí? Bueno, vamos al guión al script de Python. Lo que sucede es que cuando el usuario visita esta URL, así la página de inicio o ésta, digamos ésta, Python ejecutará la función home porque la función home está mapeada a esta URL, y la función home renderizará la plantilla HTML home dot. Entonces Python irá a la página HTML de punto de inicio, y verá que la página HTML de punto de inicio extiende el HTML de punto de diseño. Entonces este de aquí. Entonces lo que hará es que enviará este código en este bloque de aquí, y luego esta página se renderizará en la URL de inicio. Así de simple como eso, el usuario verá el layout esa página HML con su contenido hijo Entonces esta es plantilla base, esta es la plantilla hijo. Y también tenemos otro hijo en este caso, que es sobre ese HML Entonces déjame traer esto aquí. Y sólo voy a copiar esto pongo esto aquí, y esto también. Control C, y yo. Asegúrate de haber guardado todos los archivos y éste. Sí. Y echemos un vistazo si la app se está ejecutando. Sí, parece en vivo. Y voy a ir a la página principal. Sí, se ve bien. Tenemos casa y en. Vayamos a sobre la tinta. Sí. Parece que aquí hemos perdido el rumbo. El formato de esta línea, echemos un vistazo a la página ab. Sí, olvidé cerrar el Div aquí, guardar de nuevo, ir al navegador, recargar, y está bien Entonces eso es todo. Espero que las cosas estén funcionando de tu lado. Si no, por favor siéntete libre de hacer una pregunta, o incluso puedes revisar mis archivos, que estoy poniendo en la sección de recursos a la derecha de tu pantalla. Y sí, creo que nuestra aplicación está lista para más. Entonces, sigamos adelante y nos vemos en la próxima conferencia. 155. Cómo mejorar la interfaz de sitio web con CSS ++: Genial. Hemos progresado bastante Tenemos un script Python que genera Flashcap y tenemos dos funciones Y cada uno de ellos mapea dos páginas HML a dos URL diferentes Y esta es nuestra página web con dos páginas web. En esta conferencia, agregaremos algunos estilos CSS a este sitio web para que este se vea como cualquier otro sitio web moderno, y sea visualmente atractivo, y no se vea como en los 80. Bien. Para ello, tenemos que hacer básicamente dos cosas. Lo primero es que necesitamos crear un archivo CSS y escribir el código CSS dentro de él. Y lo segundo es que, una vez que escribimos este código CSS, una vez que tengamos el archivo CSS, necesitamos vincularlo desde nuestro archivo HTML de punto de diseño. CSS es un código HTML de CCS. Entonces si no lo sabes te sugiero que mires algunos tutoriales, y estoy seguro que te acostumbrarás a CSS muy rápidamente. Ya tengo un archivo CSS que estilizará mi sitio web. Cortaré esto y lo pondré en una carpeta a la que llamaré estática. Dentro de aquí, voy a crear otra carpeta y la llamaré CSS, y voy a pegar el archivo CSS justo dentro de aquí. Entonces déjame cerrar esto. Como ve, la carpeta que creé y el archivo se ha reflejado en la tre vista aquí dentro del átomo. Entonces la idea es que Python busque archivos estáticos en la carpeta estática. Así que aquí dentro de la carpeta estática, puedes poner diferentes archivos. Por ejemplo, si quieres agregar una imagen a tu sitio web, crearías una carpeta aquí llamada Imágenes y luego pondrías imágenes dentro de esa carpeta. Entonces puedes vincular esos archivos estáticos desde tu página HTML de maquetación o desde cualquier otra página. Ahora, antes de abrir el archivo CSS y pasar rápidamente por él, me gustaría mostrarte cómo puedes vincularlo al archivo CSS. Ahora, recuerda que la parte visible de un código HTML va dentro del cuerpo del texto, mientras que los enlaces como enlaces a archivos JavaScript o enlaces a archivos CSS, salen fuera de él. Y esos se deben poner dentro de las etiquetas de cabeza. Así que dirígete aquí y dirígete allí. Y luego tenemos una etiqueta de enlace. Y la L ahí significa la relación. Entonces la relación con el archivo al que estamos vinculando es una hoja de estilo Así que estamos declarando el tipo de archivo al que nos estamos vinculando Entonces es una hoja de estilo CSS, y luego tenemos la referencia aquí que será igual a la función URL cuatro, que toma como argumento, el que toma como argumento, nombre de la carpeta donde se encuentra el archivo y el parámetro de nombre de archivo, que es igual a CSS punto principal CSS Entonces lo que tenemos aquí es que declaramos el tipo de archivo al que estamos enlazados, y luego ponemos el enlace del archivo. Y esto debería estar entre comillas. Entonces todo esto. Y también me gustaría agregar un título para el sitio web, digamos, la aplicación Flask. Eso es. Voy a guardar esto. Y voy a ir a probar el sitio web. Guau. ¿Ves la diferencia? Sí. Tenemos el menú aquí muy bien. Acerca de la página, página principal, y tenemos el título justo aquí. Y luego el contenido de la página web va aquí. Ahora, todas estas barras aquí, el color de fondo, los paddings, todos estos se han definido usando CSS Así que sigamos adelante y echemos un vistazo al código CSS. Lo es. Creo que esto es bastante autoexplicativo. Pero en fin, lo que tenemos es básicamente, este es un elemento HTML, así que el cuerpo está aquí. Y una vez que escribimos el elemento HTML en el script CSS, usamos corchetes, y luego dentro de los corchetes, definimos estos atributos. Entonces el margen, la pintura, y la familia de fuentes para el texto y el color del texto. Si quieres cambiar esto, digamos 999, guardar e ir a la recarga de la página web, verás que el texto obtuvo algún color diferente Entonces esto es bastante grado. Entonces eso significa que este atributo aquí está afectando el cuerpo del sitio web. Voy a poner esto a cuatro por cuatro. Entonces tienes el elemento header, que es el responsable de este encabezado aquí. Así que en la parte superior. Entonces si quieres estilizar una parte específica de tu página web, digamos, solo el logo, que es este de aquí, primero tendrías referirte al encabezado que referirte al encabezado y luego al elemento agon, y luego te refieres a la clase logo Entonces este es un nombre de clase justo aquí. Y así sucesivamente y así sucesivamente, puedes mirar este código a tu propio ritmo, creo. Entonces la lógica es la misma. Genial. Y ahora estamos listos para implementar este sitio web en línea en la Nube. Entonces lo haremos en las próximas conferencias. Nos vemos. 156. Creación de un entorno virtual con Python: Entonces tenemos un sitio web en funcionamiento, que se ve bastante bien. El problema es que esto es en nuestro anfitrión local. Entonces la única persona que ve esto es, sí, tú o alguien que tiene acceso a tu computadora. Entonces lo que queremos hacer en cambio es desplegar este sitio web en servidor web o en Cloud, como haremos en este curso. Y vamos a estar usando la Nube Hogu. Heroku es un servicio que permite desplegar aplicaciones Python en su nube buena noticia es que puedes implementar una aplicación de forma gratuita, y también puedes tener tu dominio público gratis. Aunque necesitarás un subdominio de Heroko así que algo así como digamos Sin embargo, si tu sitio va a tener mucho tráfico más adelante, realmente querrás actualizar tu plan y comprar más ancho de banda. Desplegarse en Heroko es relativamente fácil. No tienes que pensar y hacer ningún trabajo administrativo, así que un Heroko ahorra mucho tiempo y esfuerzo para que puedas concentrarte en la programación en lugar de las partes del servidor Antes de desplegarnos a Heroku, sin embargo, tenemos que hacer algo Hay algo que deberíamos haber hecho desde el inicio de esta sección. Entonces incluso antes de escribir cualquier archivo aquí, y lo que debes hacer es que debes crear un entorno virtual el cual esté aislado de tus otros archivos y de tu instalación principal de Python. Entonces, para ejecutar nuestra aplicación, usamos Python, que viene de nuestra instalación principal. Entonces este de aquí, los que tengo aquí. Esta no es una buena práctica. Una buena práctica es tener realmente una instalación limpia de Python, que se usa solo para tu aplicación. Entonces, en esa instalación, no quieres que las bibliotecas instalen bibliotecas que no necesitas para construir aplicaciones FLASK. Por lo tanto, necesitamos crear un entorno virtual. Y aquí, te voy a mostrar cómo puedes hacer eso. Para crear un entorno virtual, es necesario utilizar una biblioteca Virtual F Python. Y para usar la biblioteca Virtual Python, es necesario instalar Virtual F. Así PIP instala Virtual NV así que estamos usando la instalación principal de Python aquí para instalar Virtual ENV Genial. Eso se instaló con éxito, y ahora vamos a crear un entorno virtual. El entorno virtual debe crearse al mismo nivel con la carpeta principal que contiene los archivos de la aplicación. Entonces si vamos a nuestro directorio, justo aquí, aquí es donde están los archivos. Y lo que voy a hacer es crear una carpeta principal aquí y llamarla mi sitio. Y cerraré átomo por un tiempo. Y esto entraría dentro de esto. Entonces justo aquí. Y ahora puedes abrir atom en este directorio porque aquí es donde vamos a crear el entorno virtual. Entonces abramos la línea de comandos ahora, y estamos listos para crear un entorno virtual. Y para hacer eso, deberías usar una biblioteca de Visual M diciendo Python. El argumento, entonces tienes Vn, que es el nombre de la biblioteca del módulo. Y aquí hay un argumento que permite a Python ubicar módulos para su ejecución como scripts. Entonces es necesario especificar un nombre para la carpeta donde se almacenarán los archivos del entorno virtual , de manera que eso debería funcionar. Veamos que se creó la carpeta virtual. Y, el ambiente fue creado con éxito. Lo que tenemos aquí es una instalación aislada de Python, y dentro de scripts, verás que ahí tienes Python. Aquí está. Bien, no te preocupes por eso. Y aquí está PIP, también. Entonces pip dot. Y eso significa que puedes usar esa Python si quieres. Déjame probar. Así que ahora estamos en el directorio Mside Eso significa que necesitamos referirnos a criptas virtuales y Python. Y eso activará nuestra nueva Python en la consola. Sin embargo, no nos interesa ejecutar Python de la estantería. Así que voy a salir de esto. Y lo que nos interesa en cambio es ejecutar realmente la aplicación FLASK usando la nueva instalación de Python. Pero antes de hacer eso, necesitamos instalar realmente Flask en nuestro Visual Python, si quieres. Y para ello, necesitas usar la biblioteca PIP de tu Python aislado Por lo que hay que apuntar a la carpeta virtual a la carpeta script entonces y luego a PIP instalar Flask Y así FASC está instalando y también instaló sus dependencias Y ya deberíamos estar bien para irnos. Así que vamos a ejecutar nuestra webapp usando nuestra nueva instalación de Python Para ello, hay que apuntar al nuevo Python y eso a demo, porque estamos en mi sitio ahora, como ves aquí, así que Demo backslash script one dot pi Eso debería funcionar. Genial. Y si vas ahora al sitio web, verás que está funcionando bien. Eso es. Ahora ya está más que listo para implementar su aplicación FASC en la nube, y eso lo haremos en la próxima conferencia Y me gustaría volver a mencionarlo que por favor tenga en cuenta que siempre debe crear un entorno virtual antes de crear su aplicación FLASK. Entonces, antes de escribir cualquier código, debes usar una nueva instalación de Python. 157. Cómo usar el servicio PythonAnywhere: Hola, bienvenidos a una nueva conferencia sobre cómo implementar tu aplicación web Flask en un servidor en vivo, lo que significa que vas a tener tu propio nombre de dominio el cual puedes darle a cualquiera y ellos pueden usar tu aplicación web. Y vamos a usar Python Anywhere. Así que ve a python ware.com. Python Anywhere cuenta con un servicio gratuito donde puedes alojar tus aplicaciones Flask. Entonces esto es lo que vamos a hacer, y es relativamente fácil de implementar en Python en cualquier lugar. Entonces este es un video actualizado en realidad, por supuesto. Antes de esto, usamos Heroku. Ahora, Heroku y Python Nware permiten alojar para implementar aplicaciones FLASK de forma gratuita La diferencia es que Python Aware tiende a ser más fácil de usar. Y Heroku, por otro lado, lo hace más difícil. Entonces usualmente sugiero que como programador, quieras enfocarte en tus códigos en lugar de lidiar con problemas de administración de servidores. Aunque también me gustaría decir que tanto Hiroko como Python ware son relativamente fáciles en comparación con si tuvieras tu propio servidor donde tendrías que manejar todo Así que aún, Hoco y Python Aware facilitan las cosas. Para poder implementar tu aplicación web FAS en Python en cualquier lugar necesitas registrarte para obtener una cuenta. Así que ve a Precios e inscríbete, y quieres encontrar la sección donde puedes crear una cuenta para principiantes porque eso es gratis. Y también tienen otros planes pagados. Entonces, si tienes más visitantes, entonces tendrías que actualizar a una cuenta paga. Entonces voy a crear una nueva cuenta. Muy bien, así que me inscribí y mi nombre de usuario es Ardit 12345. Ese es mi nombre de usuario, y este es un tablero. Ahora, en Python en cualquier lugar, además de implementar aplicaciones web, también puedes hacer algunas otras cosas. Entonces, antes de implementar la aplicación web, déjame darte un breve recorrido por Python Anywhere. Básicamente, deberías poder ver el menú del dashboard aquí, y luego tenemos consolas. En consolas, si vas a consolas, básicamente, puedes crear una consola Bash Y eso te da acceso a tu propio servidor donde implementarás tu aplicación web, y también podrías hacer otras cosas como puedes iniciar Python tres. Y empieza esa versión de Python. Entonces es un Python interactivo puedes incluso importar algunas bibliotecas aquí, así que Pandas ya está instalado, puedes usarlo La desventaja de esto es que no tienes una interfaz gráfica de usuario Entonces, si quieres mostrar para generar algunas gráficas y quieres verlas, eso no es posible en Python en ninguna parte porque todo lo que tienes es este shell. Entonces el shell Python, y vuelves a la terminal. Y por ejemplo, con PWD, puedes ver dónde te encuentras actualmente Entonces esa es tu ubicación en el servidor. Entonces estás dentro de casa, luego dentro del 20 2345, así esa carpeta de la carpeta home Aquí también puedes crear archivos Python, por ejemplo, Nano ejemplo punto PY. Nano es un editor de texto, que puedes usar en este tipo de interfaces de línea de comandos. Así que eso creará un nuevo archivo, y aquí se puede escribir código Python como print. Hola. Paréntesis. Ahora bien, para guardar este archivo, lo que quieres hacer es seguir estos comandos. Así que salga. Quieres salir con Control X. Así que presiona Control X. Verás este mensaje. Dice, guardar búfer modificado, lo que significa que ¿ quieres guardar este archivo? Y para sí o N para no. Entonces voy a presionar Y, y luego te vuelve a preguntar ¿qué nombre quieres poner en tu expediente? Ejemplo punto PY S es, sí. Así que solo presiona Enter. Ingrese y se guardará el archivo. Para ejecutarlo. Tú haces Python 3.9. Ejemplo punto PY, corre y obtienes la salida. Entonces eso es lo que puedes hacer con la consola. Si regresas, entonces tienes estos archivos. Y aquí ahora puedes ver ese ejemplo PY, que creamos anteriormente está aquí. Y ves el directorio actual, así que un Rit casero uno, dos, tres, cuatro, cinco, ese es un directorio Estábamos en la interfaz de línea de comandos. Entonces esta es otra forma de crear archivos. Entonces, si quieres crear un archivo aquí, das un nombre aquí. Digamos ejemplo dos PY y vamos a Nuevo archivo. Y digamos aquí estoy impreso. Hola otra vez. Y ahora también puedes ejecutar este archivo, guardarlo y ejecutarlo desde aquí. Así que guárdala primero y ve al botón Ejecutar. Y deberías ver la salida aquí abajo. Esto es un poco más lento que la forma anterior ejecutar la aplicación para ejecutar archivos Python. Pero de todos modos, esta es la salida. Entonces esa es otra forma de ejecutar archivos Python. Si quieres volver ya, puedes presionar aquí. Entonces esta es una página Archivos, y luego tenemos web. Aquí es donde crearemos una nueva aplicación web, pero en la próxima conferencia. Entonces tenemos tareas con tareas. Lo que podrías hacer es que podrías ingresar aquí la ruta de uno de tus Python en cualquier parte de los archivos Python. Por ejemplo, si quisiera dar la ruta de ejemplo PY, voy a decir home.r1, dos, tres, cuatro, cinco, el directorio y ejemplo PY Y luego definir un tiempo. Voy a establecer una hora aquí en el sistema horario UTC. Este script entonces se ejecutaría a esa hora todos los días. Esto podría ser útil para cosas como el raspado web si quieres escribir algo a una hora determinada todos los días, también puedes hacerlo en Python en cualquier lugar Por último, tenemos una base de datos. Menú aquí es donde se puede crear una base de datos. Entonces, si tu aplicación web tiene una base de datos donde guarda los datos, quieres crear una nueva base de datos aquí y luego crear una tabla para esa base de datos. Nuevamente, puedes hacerlo en esta interfaz aquí en bases de datos, y luego tu aplicación web podrá interactuar con esta base de datos. Entonces esta fue una introducción a Python Anywhere. En el siguiente video, vamos a implementar nuestra aplicación Python, así que nuestro flashap en Python en cualquier lugar. Nos vemos. 158. Despliega la aplicación Flask en PythonAnywhere +: Bienvenido de nuevo. Me emociona mostrarte ahora cómo implementar tu aplicación web en Python Anywhere. Entonces esta es mi cuenta de Python Anywhere, y actualmente estoy en la sección de dashboard. Quieres ir a la web y ahí quieres crear una nueva aplicación web y obtienes este mensaje aquí. Python en cualquier lugar te está haciendo saber que no puedes tener un nombre de dominio personalizado, digamos, ardit.com porque esta es una cuenta gratuita Si quieres un nombre de dominio personalizado, entonces quieres pagar para obtener una de las cuentas pagas. Primero, sin embargo, quieres encontrar un proveedor de dominio para comprar un nombre de dominio. Entonces, si quieres comprar el nombre de dominio example.com, por ejemplo, te gustaría ir a tal vez chip de nombre El chip de nombre es, creo que el mejor para obtener nombres de dominio. Así que nombra chip.com, y una vez que compres un nombre de dominio ahí, entonces el chip de nombre te dará algunos nombres DNS, y esos nombres los tienes que poner aquí en un Python en cualquier lugar para conectarlos a tu web sin embargo, no estamos haciendo eso ahora Para nuestro propósito, basta con tener este tipo de nombre de dominio, que es, en mi caso, este de aquí. Entonces Rs uno, dos, tres, cuatro, cinco, punto Python Anywhere, punto com. Entonces este es un subdominio de Python aware.com . Presiona el siguiente. Y tienes varias opciones. La que queremos es Flask, por lo que puedes implementar diferentes tipos de aplicaciones web en Python en cualquier lugar. Presionamos en FRASK, y Python 3.9 es bueno para ir. Entonces presiona ahí. Y este es ahora el punto de entrada de la app Flask. Por punto de entrada, quiero decir, el archivo que ejecutas para iniciar la app de FRASK. Entonces en nuestro caso, es script un punto PY. Ese es un archivo que ejecutamos con Python script PY. Entonces no cambies eso, déjalo como está. Así que presiona siguiente por ahora. Y la app está creada, pero necesitamos agregar nuestros archivos a nuestra app. Entonces para eso, quieres ir al menú de archivos. Y ahora aquí a la izquierda, puedes ver mi sitio. Si haces clic ahí, vas a ver el archivo que Python Anywhere creó. Entonces este es el punto de entrada del que estaba hablando, aplicación Flask Underscore que es PY Quieres hacer clic ahí y quieres eliminar ese código y pegar copia tu propio código y pegar tu código ahí y presionar en guardar. Entonces puedes ver ahora que estamos en este directorio. Así que corte O R el uno, dos, tres, 45. Entonces tu nombre de usuario MySite, fA FAS Underscore app que PY es nuestro archivo Entonces, si haces clic en mi sitio, vuelves al directorio raíz de tu proyecto. Entonces ese es el directorio raíz de Python Anywhere, y este es el directorio raíz de nuestro proyecto local. Entonces script uno que PY está ahí, y luego tiene una carpeta estática y una carpeta de plantilla en el mismo directorio raíz. Por lo tanto, en este directorio raíz de Mist, queremos crear una carpeta de plantillas. Entonces escribe plantillas ahí y presiona en nuevo directorio. Eso creará una nueva carpeta de plantilla. Ya ves que cambió a esta carpeta. Entonces si vuelves a mi lado, ves plantillas se agrega en la aplicación Flask underscore del directorio también está en la misma carpeta, mi sitio Y también queremos crear una carpeta estática vacía. Nuevo directorio, presione ese botón y debería crear una carpeta estática. Así que vuelve a mi lado. Ves estática y las plantillas ya están ahí. Entonces necesitamos agregar nuestros archivos estáticos. Así que presiona en estática. Ahora estás en estática dentro de estática y quieres subir main eso es CSS, pero espera, esto está en otra carpeta. CSS es la carpeta, así que quieres crear dentro de estática. Desea crear un directorio CSS. Pulse en nuevo directorio. Asegúrate de estar en ese directorio, así que mi sitio barra diagonal estática CSS Y aquí ahora queremos subir el archivo. Y ese archivo es este Css principal. Así que aquí estoy Este es el directorio de proyectos con nuestros archivos locales. Bajo Estática bajo CSS, tenemos principal Dot Css. Haga doble clic, y se cargará dentro de CSS. Después vuelve a mi sitio, ve a plantillas y sube. Los archivos que están dentro de las plantillas, que es sobre el HTML de punto de inicio, y el tercero, el HTML de punto de diseño. Estas tres son plantillas internas. Así que asegúrate de que estén dentro de las plantillas. Entonces vuelve a mi sitio y solo echa un vistazo si todo se ve bien. A mi me queda bien. Un cambio que quieres hacer también es que quieres ir a tu app, y cuando tu app esté en producción, quieres cambiar esto a false. Entonces no quieres mostrar a los visitantes errores de Python porque eso podría hacer que tu app sea propensa a hackear. Porque la gente o los hackers verán los errores de tu app. Ellos pueden entender cómo está estructurada tu aplicación web y también puedes exponer datos que no quieres exponer en esos mensajes de error de depuración que Flask muestra. Así que falso y presente seguro y ahora estamos listos para ver nuestra app, pero después de haber vuelto a cargar la app con este botón Entonces, debajo de la sección web, presiona y vuelve a cargar ese botón para obtener la última versión de los archivos servidos por Python en cualquier lugar Y luego quieres hacer click en esa URL. Entonces esa es la URL de mi aplicación, presiona ahí, y mi sitio está en línea. Entonces está funcionando simplemente genial. Espero que el tuyo también esté funcionando. Si no es así, entonces quieres volver a la sección web y desplazarte hacia abajo y localizar estos registros de errores. Si presionas ahí, vas a ver los últimos errores que obtuviste de tu aplicación web. Entonces estos son errores de Python e intenta leerlos para entender lo que está pasando. Si no los entiendes, dudes en publicar una pregunta en las preguntas y respuestas, pero asegúrate de copiar y pegar estos errores allí y también el código de tu aplicación web, y estaremos encantados de ayudarte Muchas gracias. Te hablaré en los próximos videos. 159. Introducción a la biblioteca de Tkinter: Hola, y bienvenidos a esta nueva sección del curso. En esta sección, vas a aprender a construir interfaces gráficas de usuario con Python. Y específicamente, vamos a usar la biblioteca Tkinter para Entonces en esta sección, no vas a construir ningún programa del mundo real. Te presentaré la biblioteca de Tkinter y, por supuesto, construiré una interfaz gráfica de usuario, un pequeño programa que te permitirá comenzar con Después en la siguiente sección, así que una vez que hayamos terminado con esta sección en la siguiente sección, vas a aprender a interactuar con bases de datos con Python. Así que vamos a estar usando Python como un envoltorio de código SQL para que podamos almacenar datos en una base de datos de consulta de datos, eliminar y así sucesivamente y así sucesivamente. Entonces esa fue una sección después de esta. Y luego en la primera sección después de estas dos secciones, vamos a construir un programa del mundo real. Y ese programa es éste de aquí. Entonces lo llamé librería, y lo que hace esto es que te permite almacenar información del libro en una base Esta es una interfaz gráfica de usuario. Por lo que este programa se hace en dos partes. Tienes una interfaz gráfica de usuario, que son los botones vidente, que se llaman Widgets Y esto fue construido con Tkinter. Y luego tienes el back end, que consiste en código que se comunica con la base de datos. Entonces, por ejemplo, si presionamos el botón de vista, estamos adquiriendo la base de datos para cargar todos los libros para nosotros. Oh, tenemos el título. Entonces, si presionas uno de ellos, obtienes el título aquí, el autor y el año del libro. Y también el número de identificación del libro, que se llama ISBN. También puedes buscar una entrada. Entonces, si quieres buscar un autor, escribes el nombre del autor, Ni y presiona Buscar. Y si quieres agregar una entrada, solo tienes que escribirla. Y si, algo así. Agregar entrada. Y si los vuelves a cargar, tu entrada debería estar aquí. Entonces este es un programa. Vamos a construir dos secciones después de esta. Entonces déjame cerrar esta de aquí, y en la próxima conferencia, te presentaré la biblioteca de Tinder. Entonces estaremos construyendo algunas interfaces simples con algunos widgets. Te veré en la próxima conferencia. 160. Cómo crear una ventana GUI y agregar widgets: Entonces aquí vamos. He abierto Atom aquí, así que voy a usar Atom para construir el programa de librería, por así decirlo, que usa kinder y Aquia Light tres Así que voy a seguir adelante y crear un nuevo archivo Python aquí. Qué guión. Pastel ganado. Ahora para construir interfaces gráficas de usuario con Kiner, necesitas la biblioteca inter, y no tienes que instalarla porque Tkinter es una biblioteca Python incorporada Entonces todo lo que tienes que hacer es seguir adelante e importar Tkinter. Si estás en Python dos, esto sería con en T. En Python tres, es Tkinter simplemente así La buena práctica, sin embargo, es importar realmente todo de Tkinter Entonces de Skiner importar todo Entonces, ¿por qué hacemos eso? Lo hacemos porque vamos a usar muchos objetos Tkinter en nuestros scripts Entonces tiene sentido simplemente cargarlos todos en lugar de hacerlos referencia con el botón de punto Tkinter, En lugar de hacer eso, solo podemos decir botón, y luego ingresamos los parámetros y así sucesivamente. Así que permítanme crear una interfaz gráfica de usuario. Ahora, en kinter programa se compone de dos cosas principales. Tienes la ventana y tienes los widgets. Entonces por ejemplo, la ventana es todo este programa aquí que ves, y luego tienes botones y cosas así, que se llaman widgets. Entonces, antes que nada, necesitas crear la ventana. Y me gusta llamar a mi ventana variable, y eso sería igual a decaimiento. Eso es. Eso crearía una ventana vacía para nosotros, pero tenemos que hacer algo más aquí. Decimos ventana ese bucle principal. Esto siempre es necesario. Entonces abrimos una ventana, creamos una ventana, y luego todo va entre estas dos líneas. Entonces se crean crestas entre estos dos. Y esto es necesario porque si no tienes esto, tu programa se abrirá y cerrará en una fracción de segundo. Entonces, básicamente, esto te permite presionar ese botón en la esquina de tu ventana y cerrar el programa. Entonces esto debería estar siempre al final de tu código. Voy a guardar este script y lo voy a ejecutar. Y tenemos un error, dice que TK no está definido, así que Python no está reconociendo esta función aquí porque debería ser T. Y ejecutar de nuevo. Y esta es la ventana, y no tiene nada adentro, así que sigamos adelante y agreguemos un botón. Entonces almacenamos la ventana principal en una variable, y vamos a hacer los mismos cuatro widgets. Entonces vamos a crear variables. Digamos que B uno es igual a botón. Entonces el botón es una función que genera un widget de botón. La función bottom toma algunos argumentos. Si quieres obtener una lista completa de argumentos, querrás hacer algo de introspección de código Digamos IPython aquí. Y de la piel a la importación. Tire, y luego digamos botón y un signo de interrogación. Y aquí puedes ver qué parámetros puedes pasar a la función inferior. Ahora, el primer parámetro que te gustaría agregar al widget es la variable de la ventana de la ventana principal. Entonces necesitas decirle a tu widget, la ventana que el widget tiene que estar empaquetado también. Entonces ventana y luego puedes pasar parámetros como el que ves aquí. Digamos que uno de los parámetros principales sería el texto. Entonces el texto es igual, digamos, a la cadena ejecutar. Entonces ese es el texto la etiqueta que se mostrará sobre la parte inferior. Ahora bien, si intentamos ejecutar este script ahora, verás que aún no tenemos un botón, y eso es porque no hemos especificado dónde poner ese fondo. Para ello, necesitas usar el método pack, que es un método widget y luego volver a ejecutarlo. Y ahora ves el fondo. Sin embargo, hay otra manera de poner realmente tu widget en tu ventana. Ese es un método de cuadrícula. Rejilla. Y muchas veces es cuestión de preferencia si se usa pack o grid. Pero la idea de grid es que con el método grid, tengas más control sobre la posición de tus botones o tus widgets en general porque aquí especificas la fila y la columna donde quieres poner tu fondo. Entonces todo empieza desde cero. Y así la primera fila tiene un índice de cero, y la primera columna tiene un índice de cero y así sucesivamente. De hecho encontré una ilustración para eso. Entonces este es el programa kinder, y tenemos dos filas aquí Entonces tenemos esta primera fila, que debería tener un índice de cero, y usted tiene la segunda fila, que debería tener un índice de uno. Y tienes columnas, entonces cero, uno, dos, tres, y así sucesivamente. Y digamos que el botón OK, que es este de aquí tendría una fila de cero, uno, dos, así dos para la fila, y luego cero, uno, dos, tres, tres para la columna. Entonces también podrías tener widgets que se extienden en más de una fila o columna. En ese caso, agregaría otro parámetro aquí llamado rowspan. Y eso sería igual a un número. Digamos que si pones el botón se abarcaría en dos filas. En nuestro caso, esto no es necesario, en realidad, porque no tenemos muchos widgets. Sólo tenemos un botón. Y entonces déjame ejecutar este script ahora y ver qué obtenemos. Entonces obtenemos un botón, que en realidad no hace nada porque no hemos especificado qué acción realizar cuando estás presionando el botón. Y eso lo explicaré en la próxima conferencia. Pero por ahora, agreguemos algunos widgets más aquí, solo para que te familiarices más con los widgets. Así que agreguemos un widget de entrada. Y digamos E E uno para eso. Entonces la entrada uno es igual a la entrada, y luego adivina cuál es el primer parámetro. Y ese es el parámetro de ventana. Y podemos dejarlo así por ahora. Y digamos un grado E uno. Y mantengámoslo en la misma fila y en la columna uno. Guardar ejecutar. Y aquí tenemos una entrada. Entonces, ¿qué es una entrada? Una entrada es como un área donde puedes ingresar un valor, luego puedes interactuar con ese valor en tu guión. Entonces digamos que ingresas kilómetros aquí y te gustaría tener un botón que convierta esos kilómetros en millas. Entonces el botón obtendría el valor de esta área aquí, y lo mostraría en otro widget, que podría ser un widget de texto. Entonces agreguemos un widget de texto. Digamos que T uno es igual a ventana de texto, claro. Y digamos T uno, fila de cuadrícula cero columna dos. Eso es. Ejecutar. un widget de texto muy grande porque el tamaño predeterminado, la altura y el ancho predeterminados son en realidad un número bastante grande. Entonces necesitamos especificar dos parámetros para el widget de texto. Habría que poner la altura. Digamos una celda y el ancho. Digamos 20. Y así esta es el área de widgets. Y esta es la entrada, y esta es la parte inferior. Y eso es todo para esta conferencia. En la próxima conferencia, te voy a mostrar cómo poner estos widgets en la vida para que realmente puedan hacer algo. Nos vemos en la próxima conferencia. 161. Conectar widgets de GUI con funciones ++: Hola, nuevamente, en la conferencia anterior, construimos esta interfaz gráfica de usuario con Kiner Y el problema es que esto no hace nada por ahora, así que presionamos esto, pero no hace nada. Entonces lo que me gustaría hacer aquí, la salida final que me gustaría tener es cuando ejecuto este fondo, así tenemos una entrada aquí. Podemos ingresar valor, y quiero ejecutar este botón y obtener millas aquí en el área de texto. Entonces millas es como 1 kilómetro unidad es igual a 1 milla por 1.6. Entonces si ejecuto esto, quiero que se genere algo así como 16 aquí. Entonces un programa muy sencillo. Tenga en cuenta que este no es uno de los programas reales que prometí construir en este curso. Entonces esto es solo para ponerte en marcha con kinder. Entonces, vamos a cerrar esto ahora. Y para que un botón haga algo, necesitamos agregar un parámetro de comando aquí. Entonces el parámetro command toma una función aquí como argumento, como un valor. Y luego al presionar ese botón, ejecutar botón, en este caso, se ejecutará la función que tiene aquí. Entonces digamos que aquí tenemos una función que kilómetros a millas. Digamos esta función por ahora , solo imprime algún texto. Digamos que el éxito, por ejemplo, porque ya sabes, es bueno antes de escribir tu programa real, es bueno usar declaraciones impresas para probar las cosas. Así que eso te permite aislar tus problemas. Si algo sucede aquí, sabes que no puedes tener ningún problema con una declaración print, pero si aquí tenías una expresión más complicada, se hace más difícil saber si el problema ocurre aquí que no estás apuntando a la función correcta, o tienes un problema con tu declaración. Por lo que es bueno usar primero declaraciones simples, como la declaración print. Entonces irías aquí y kilómetros 2 millas, esa es la función. Y una cosa que debes tener en cuenta es que no pasas los corchetes aquí. Entonces esta no es la llamada de función habitual. Solo estás haciendo referencia a la función aquí y deja que Python se encargue del resto Entonces el nombre de la función va aquí y probemos esto. Ejecute, y veas que tenemos éxito impreso aquí. Presione de nuevo, éxito éxito, éxito. Entonces está funcionando. Sin embargo, no necesitamos imprimir el éxito en la línea de comandos. Queremos imprimir un valor en el área de texto. Ahora, tenemos que mirar el widget de entrada. B aquí es de donde vamos a obtener el valor, así el usuario ingresa un valor en el widget de entrada, y luego agarramos ese valor y luego usamos ese valor en nuestra función. Y para ello, hay un parámetro llamado variable de texto. Y eso sería igual a un objeto var string, que tenemos que declarar más arriba aquí. Entonces digamos que quieres valor, entonces eso es variable, y eso sería igual a la función string var. Y luego apuntamos a E una variable de valor, que acabamos de crear. Por lo que esta variable obtendrá el valor dependiendo de lo que el usuario ingresará en el widget de entrada. Entonces podemos usar este valor lo que queramos. Digamos que queremos imprimir eso en valor, y también necesitamos agregar algo extra aquí, que es un método get del objeto string. Entonces este es un objeto especial. No es una cuerda, una cuerda de juego de Python. Para obtener una cadena real de fuera de este objeto, necesitamos aplicar el método G. Así que guarda esto y prueba el guión. Digamos, diez aquí, ejecutamos, y sacamos diez impresos en la terminal. Así que todavía no hemos conectado esta cadena aquí con un widget de texto. Entonces hagámoslo aquí. La idea aquí es que necesitamos insertar un valor en el widget de texto. Y para ello, el widget de texto tiene un método llamado insert. Por lo que necesitas hacer referencia al widget de texto que deseas. Entonces T uno es nuestro objeto de texto, y luego aplicar el método insert. Y el método obtiene primero un argumento, que es un lugar donde se quiere insertar el texto. Digamos que queremos insertar al final del widget de texto. Por ejemplo, supongamos que está insertando muchas líneas de texto en su widget y tendría que aplicar para ejecutar este método varias veces. Y cada vez si pones ingresas el nuevo texto en la parte inferior del texto existente. Entonces estás diciendo poner al final este texto. Quieres valor punto G. Así que la cadena de valor que el usuario ingresará en el widget de entrada. Entonces veamos cómo va esto. Ejecuta la función y pon algo de texto aquí. También puedes poner cualquier cosa ahí, ejecutar y obtener la cadena impresa en el widget de texto. Bien, pero no queremos simplemente agarrar este valor e insertarlo en el texto. Queremos primero hacer algo con este valor, y luego insertamos el producto, la salida en el widget de texto. Digamos que vamos a agarrar el punto de valor on get, y lo multiplicaremos por 1.6. Y eso serían millas. Así que las millas equivalen al valor que el usuario introduce por 1.6. Entonces le estás pidiendo al usuario que ingrese kilómetros, y 1 milla es igual a 1 kilómetro por 1.6 en realidad es algo así como 1.6 o seis. No recuerdo el valor exacto, pero entiendes la idea. Y por último, querrás pasar millas por aquí. Entonces quieres insertar el valor de salida en el widget, seguro. Y ejecutar. Y espero obtener un error aquí. Digamos diez. Sí, tenemos un error. Y así cuando te den errores, no solo intentes copiar este error y pegarlo en Google y tratar de ver lo que dicen otras personas. Es posible que pierdas mucho tiempo. En cambio, invierta algo de tiempo y trate de entender este error. Entonces lo que esto está diciendo, dice error de tipo. No se puede multiplicar secuencia por no entero de tipo float. Entonces una secuencia puede ser una lista puede ser una cadena, una tupla, etcétera. Python está tratando múltiples secuencias con un no entero que es un flotador. Así que flotar aquí está el número 1.6, y Python está tratando de multiplicar 1.6 con una secuencia con esto aquí. Entonces esto no es un número porque el método G realmente agarra una cadena de un objeto de cadena Y una cadena no se puede multiplicar por un número de flujo. Si esto fuera dos, era posible multiplicarse. Por ejemplo, si multiplicas M, la cadena M por dos, obtendrías a Mimi Entonces, pero no puedes multiplicarme por 1.6 porque no tiene ningún sentido. De todas formas, entonces la solución a esto es que quieres convertir el valor que el usuario ingresa a un float, y lo haces agregando la función float. Así que ten cuidado con los soportes. Ves que hay un subrayado debajo del paréntesis y tienes un subrayado Entonces esto significa que este soporte se cierra aquí. Entonces todo se ve bien, seguro y ejecutar de nuevo, diez, y ejecutar. Y obtenemos la salida esperada. Puede eliminar la función de impresión. Ya no lo necesitamos. Creo que fue un buen comienzo con la biblioteca Kiner, y ahora deberías poder hacer interfaces más avanzadas No obstante, estaremos construyendo una interfaz gráfica de usuario real avanzada con Kiner, que interactuará con la base de datos, por lo que será un programa del mundo real Y por ahora, solo te voy a entregar un ejercicio en la siguiente conferencia para que practiques un poco Kiner Y también se llega a conocer con algunos aspectos más cosméticos. Entonces harás que el programa que construimos en esta conferencia, lo harás más atractivo visualmente y y te asegurarás ensuciarte las manos con kinder un poco Hablaré con usted más tarde. 162. Cómo interactúa Python con las bases de datos: Hola, y me complace presentarles esta nueva sección del curso. En esta sección, vas a aprender a interactuar con bases de datos a través de Python. Y lo que eso significa es que usarás bibliotecas específicas de Python, y vas a operar una base de datos desde Python usando Python. Vas a hacer operaciones como insertar datos en tablas de base de datos. Podrás actualizar datos, eliminar y consultar datos de la base de datos. Entonces eres capaz de usar esos datos en tu programa Python. Python es capaz de interactuar con muchas bases de datos como MySQL, Post GraculoCle o SQLite En esta sección, vas a aprender a interactuar con una base de datos SQL light y publicar una base de datos SQL también. SQL Lite y PostGrasul son diferentes en eso. SQLite no es una base de datos cliente servidor. En cambio, está incrustado en el programa final. Entonces, ¿qué significa eso? Bueno, veamos este programa. Si sigues la sección anterior, sabes que vamos a construir este programa en la siguiente sección. Al hacer clic en un botón aquí, verá algunos datos, y estos datos se almacenan en la base de datos SQL Lite. A diferencia de otras bases de datos como SQL de postgrado, SQLite se basa en archivo Así que todos estos datos aquí se almacenan en el archivo de base de datos DbFle punto Entonces eso significa que solo puedes darle este programa a otra persona que no tenga SQLite instalado, y ellos pueden usar este programa, para que puedan agregar más datos aquí, pueden actualizar datos y eliminarlos y así sucesivamente Pero si tienes este programa en la base de datos SQL de postgrado, el usuario al que le das el programa, necesitarían tener PostgreSQL instalado en su computadora para poder operar los Así que considera SQLite, pequeña base de datos, y se puede llamar portátil, pero es muy popular y post GrasCul sería más apropiado para usar en una Entonces digamos que tienes algunos formularios, estás obteniendo algunos datos del usuario en tu sitio web y almacenas tus datos en una base de datos post GrasCul en tu servidor Python es un programa que obtiene los datos de tus formularios en el cliente en el navegador y envía esos datos en tu base de datos. Para poder interactuar con estas bases de datos, es necesario tener dos bibliotecas, y estas bibliotecas sirven como interfaces para enviar realmente código SQL a la base de datos, y la biblioteca para interactuar con una base de datos SQLite se llama SQLite tres, y la biblioteca para trabajar con una base de datos SQL de posgrado es psico Entonces en esta sección ahora en la próxima conferencia, te voy a mostrar cómo trabajar con SQLite tres y luego saltaremos a psicopg dos. Entonces, sigamos adelante. 163. Conexión a una base de datos SQLite con Python: Todo bien. En esta conferencia, vas a aprender a usar SQLite tres Así que Acul tres es la biblioteca Python para interactuar con bases de datos SQL Lite Así que piensa en ello como un envoltorio Python de código SQL. Así que en realidad puedes escribir código SQL dentro de Python usando Ascoli tres No es necesario instalar Scull three porque SQLite three es una biblioteca Python incorporada Entonces todo lo que tienes que hacer es importar culto tres. Déjame probarlo. Guión uno. Sí, está funcionando. Ahora, el proceso estándar de interacción con una base de datos consistiría en cinco pasos. Primero es conectarte a la base de datos. Segundo es crear un objeto cursor, y el objeto cursor es como un puntero para acceder realmente a las filas de una tabla de una base de datos. Entonces el primer paso es aplicar una consulta SQL, por lo que es posible que desee insertar datos en la base o seleccionar datos de la tabla y así sucesivamente y así sucesivamente. Y entonces el cuarto paso es que comprometes tus cambios a la base de datos, y luego cierras la conexión. Entonces sigamos adelante y escribamos un ejemplo con todos estos cinco pasos que acabo de mencionar. Entonces lo primero, necesitas crear una conexión, y quieres almacenar ese objeto de conexión en una variable. Entonces digamos C. Eso sería igual a culto a tres puntos conectar. Y lo que pasa aquí es el archivo de base de datos. Entonces digamos que punto DB. Y si aún no tienes un archivo de base de datos, tu base de datos será creada por esta línea de código, y se establecerá la conexión. Si tienes una base de datos, se establecerá una conexión con tu base de datos existente tan simple como esa. Entonces tienes que crear un objeto cursor, así que cur la variable, y necesitas hacer referencia a tu conexión y luego al método cursor, que es un método del objeto de conexión Hasta el momento tan bueno, entonces aquí viene el código SQL real. Desea apuntar a su objeto cursor, y luego usar el método execute. Y luego entre corchetes es donde ingresas tu código SQL. Recuerda, tu código SQL siempre va dentro del código. Entonces se pasa el código SQL como una cadena al método execute del objeto cursor de la biblioteca tres de SQL Lite. Entonces, si estás familiarizado con SQL, esto debería ser fácil para ti. Si no estás familiarizado con SQL, SQL es bastante sencillo, por lo que podrás aprenderlo con bastante rapidez. En este punto, tenemos una base de datos, pero no tenemos ninguna tabla en la base de datos porque una base de datos está hecha de tablas y las tablas tienen filas y columnas. Entonces primero, quieres crear una mesa. Y una buena práctica es usar letras mayúsculas para las palabras clave SQL. Así que create es una palabra clave ASCL. Table también es una palabra clave AscUL. Y luego quieres especificar el nombre que quieres darle a la mesa. Digamos tienda. Así es como ordenas Python VasQul para crear una tabla, pero luego necesitas especificar qué columnas quieres, qué campos quieres en tu Entonces supongamos que estamos creando una tabla. Tenemos una tienda, tenemos una tienda, y queremos almacenar nuestros productos en tabla de base de datos SQL. Entonces nos gustaría tener el artículo. Entonces ese sería el nombre del ítem. Y el ítem sería tipo de datos de texto. Entonces el texto es como cadenas en Python, y entonces querrías tener cantidad. Y eso sería un entero. Entonces, cuántos de este artículo tienes en tu tienda y el precio también. Y digamos real por el precio, que debería ser un flotador en Python. Entonces un número de punto decimal. Eso es. Aquí cierra el código del código SL, y aquí está el último paréntesis del método execute. Entonces es necesario que se comprometan estos cambios a la base de datos. Entonces te refieres a la conexión y luego te comprometes, y luego quieres cerrar la conexión. Entonces eso es todo. Se guarda eso y va a ejecutar. Qlite no está definido, claro, porque he cometido un error aquí en Typo Y nuevamente, y como ves, se creó una base de datos. Ahora bien, si vuelves a estar en el programa, obtienes un error porque la tabla ya existe en la base de datos. Entonces, lo que podrías hacer aquí es un simple truco. Necesitas agregar algo de código en tu línea SQL. Dices, crear tabla si no existe. Tan seguro. Y si estás en tu código otra vez ahora, no pasará nada porque lo que hace Python es, va y se conecta a la base de datos, entonces crea un cursor. Y entonces si hay una mesa llamada store, no hace nada, y va a la siguiente línea. Si no hubiera mesa, crearía una mesa. Entonces es bueno tener este simple condicional aquí dentro del código SQL. ¿Qué tal agregar algunos datos a nuestra tabla vacía? Vamos a probar eso. C ejecutar. Entonces estamos ejecutando algo de código SQL nuevamente, y la palabra clave que inserta datos en la base de datos es insert. Después desea especificar dónde desea insertar los datos. Así que inserte en la tienda. Y qué valores quieres insertar en tu mesa de tienda. Entonces valores, luego abres corchetes y dentro de los corchetes, ingresas los valores en el orden correcto. Entonces en el orden en que hayas definido tus columnas, así tendrías cantidad de artículo y precio, y digamos copa de vino. Ahora bien, esto es una cadena, por lo que debería ir dentro de comillas. Y deberías usar comillas simples aquí porque estás usando comillas dobles para la expresión externa. Entonces, si usas comillas dobles aquí, confundirás a Python y te pondrás así que usa comillas simples Es por eso que tenemos diferentes tipos de citas para envolver cadenas. Entonces tenemos la copa de vino de cuerda, y digamos que tenemos una cantidad de ocho y el precio de 10.5 Guarde eso y siga adelante y ejecute. No recibimos un error, así que eso fue exitoso. Ahora bien, ¿y si queremos insertar otra fila? Bueno, podríamos agregar esa línea aquí debajo de esto. Pero entonces cuando ejecutamos el código, también obtendríamos esta línea ejecutada. Entonces tendríamos un duplicado de esta fila. Por lo tanto, lo que podríamos hacer en este caso es que usaríamos una función para envolver nuestras sentencias SQL separadas. Entonces puedes sangrar este bloque de código si quieres, puedes ir a editar líneas sangría, o podrías usar atajo, que puede ser específico en tu Así que solo busca aquí tu atajo de teclado, y luego solo puedes usar eso. Entonces la razón por la que estoy intentando el bloque de código es que quiero crear una función aquí Digamos función crear tabla. No olvides la columna ahí. Y entonces quiero una función separada. Para datos insertados. Entonces esa sería la sentencia SQL para la función insert, pero se puede ver la diferencia entre esta función y esta función. Aquí no estamos creando una conexión a la base de datos, lo cual es incorrecto. Entonces querrás insertar estas líneas aquí. Para que establezcas una conexión con la base de datos. Y entonces cierras correctamente esa conexión. Entonces ya sabes cómo usar las funciones de Python. Y naturalmente, la necesidad viene pasar parámetros a tu función aquí. Entonces quieres decir artículo, así que solo algunas variables y cantidad. Precio. Y entonces querrías de alguna manera reemplazar estos parámetros aquí que cada vez que llames a la función, insertes algunos argumentos y esos valores se inserten en tu tabla. Ahora, puedes usar marcadores de posición de cadena, marcadores de posición de cadena Python para reemplazar estos valores con los valores que pasará el usuario cuando llame a la función Pero esta no es una buena práctica porque tu código sería propenso a las inyecciones SQL de las putas, y eso aplica cuando, por supuesto, cuando tu aplicación web está en la web Pero de todos modos, una buena práctica es poner signos de interrogación aquí. Y luego después de la sentencia SQL, después del código doble, querría pasar las variables por las que estos signos de interrogación podrían reemplazarse. Entonces querrías artículo, así que en la cantidad de pedido y precio correctos. Entonces probemos todo esto ahora. Me gustaría ejecutar la función insert que acabo de crear con algunos elementos nuevos. Entonces digamos agua, vaso, tenemos diez de ellos, y esto sería menos costoso. Guarde eso y vaya y ejecute. Aquí cometí un terrible error. Envolví con código todos los argumentos. Entonces el vaso de agua debería estar cerca, y estos son números. Así que guarda de nuevo e inténtalo de nuevo. Y tus datos deben conocerse en la base de datos. Entonces una vez más, y digamos Taza de café. Ejecutar de nuevo a salvo. Ahora estoy seguro que querrías ver los datos que has estado insertando tu base de datos en tu tabla. Así que vamos a crear una función que haga precisamente eso. Digamos vista en profundidad. Y querrías establecer una conexión con la base de datos. Entonces vamos a copiar eso. Pégalo aquí, y luego aquí va el código SQL, así que cur ejecutar Por lo que siempre usamos el método execute para enviar código SQL a la base de datos. Y luego tenemos cotizaciones. Digamos que queremos seleccionar los datos de todas las columnas de la tabla de la tienda. Así que selecciona un asterisco, lo que significa todo de la tienda Todo bien. Entonces los seleccionamos, pero ¿cómo recuperamos realmente estos datos para que podamos usarlos en Python Bueno, la forma de buscarlos es mediante el uso de los métodos fetch all Y queremos seleccionar para almacenar esas filas en variable. Entonces digamos que las filas lo van a buscar todo. Y luego tenemos que cerrar la conexión. Entonces, a diferencia los otros métodos donde estábamos escribiendo datos a la tabla, aquí solo estamos seleccionando datos, así no tenemos que usar el método commit. Y queremos devolver la variable rosa. Y solo me gusta imprimir la salida de la función. Entonces la salida de la función es variable rose. Entonces voy a obtener el valor de rosa impreso en la línea de comandos. Guarde el script, ejecute. Por supuesto, aquí tengo un error tipográfico y deberían ser devueltos. Inténtalo de nuevo. Y aquí están nuestros datos. Entonces tenemos un vaso de agua, y tenemos dos líneas de tazas de café. Eso es porque ejecutamos la función antes, la función insert, y luego ahora que volví a ejecutar el script con el propósito de que se ejecutara la función view, la función insert también se ejecutó por segunda vez. Por lo que la taza de café se insertó dos veces en la mesa. Bien, eso es para esta conferencia. Y en la próxima conferencia, te voy a mostrar algunas operaciones más que puedes hacer con la base de datos. Entonces te hablaré más tarde. 164. SQLite: selección, inserción, eliminación y actualización de registros SQL: Entonces en la conferencia anterior, te presenté a la biblioteca SQLite tres, y te mostré cómo crear una tabla en tu base de datos SQL y cómo insertar datos en tu base y cómo seleccionar datos y verlos en Python Entonces tenemos estas cuatro líneas, cuatro filas en nuestra tabla de base de datos. Y en esta conferencia, rápidamente te mostraré cómo eliminar y actualizar datos de tu tabla. Así que de nuevo, voy a crear una función así que déjame copiar esto. Todavía necesitamos conectarnos a la base de datos y crear un objeto cursor. Entonces necesitamos usar el método execute. Y en este caso, me gustaría eliminar la fila que tiene la copa de vino. Entonces dentro de ejecutar, escribiríamos, eliminaríamos de la tienda donde el ítem es igual, me gustaría usar el marcador de posición de signo de interrogación aquí Así que marca y entre paréntesis, nos gustaría el parámetro que pasaríamos por nuestra función. Entonces este ítem aquí es el que ponemos dentro de aquí, ítem, y déjame cambiar el nombre de nuestra función. Entonces esta es esta. No lo confundas con esto. Esta es la columna de nuestra tabla, y esta era la fila de la función anterior. Eliminar esto también. Y también quieres comprometer los cambios en tu base de datos. Así que comprométete. Entonces eso es todo. Y me gustaría comentar esto así no quiero volver a ejecutar la función insert. Y quiero que la función view se ejecute después de que eliminemos la fila. Así que borra. Entonces artículo ¿qué artículo querrías eliminar? Así que el artículo copa de vino. Y veamos qué va a pasar. Tenemos un error y te preguntamos tres error, número incorrecto de encuadernación suministrada. Línea 28, puedo ver si, hay algo que a menudo olvido. Necesitas agregar un coma aquí. Verás eso cuando te enseñe cómo conectarte a una base de datos postgrascule y cómo consultar datos de la base de datos postgrascule El código es bastante similar, pero tiene algunos cambios críticos como este de aquí. Por lo que puede resultar confuso cuando trabajas con diferentes tipos de bases de datos. Vamos a probar esto otra vez. Y, parece estar funcionando ahora. La copa de vino no está aquí. Entonces así es como borras una fila. Ahora agreguemos otra función. Para actualizar la actualización de datos. En esta, me gustaría actualizar la cantidad de gafas fotográficas. Entonces quiero cambiar este 10-11. Nuevamente, establece su conexión con la base de datos, crea un objeto cursor, y luego ejecuta, y aquí ingresa el comando update SQL. Así que actualiza lo que quieres actualizar es la tabla de la tienda. ¿Y qué columna quieres actualizar desde la tabla de la tienda? Entonces quieres establecer el nombre de la columna, que en este caso sería cantidad. Y eso sería igual a qué? ¿Adivina qué? interrogación. Y luego dices, ¿dónde? O déjame mostrarte cómo actualizar más de una columna. Entonces, si quisieras más de una columna, usarías una coma y luego dirías precio es igual a otro signo de interrogación Bien, entonces decimos actualizar, almacenar y establecer cantidad y precio a esto, pero ¿qué fila? Entonces hay que especificar condicional aquí. Por lo que el artículo equivale a copa de vino. O también puedes establecer esto en un signo de interrogación. Entonces tienes tres colocadores aquí, y luego tienes la cotización para cerrar tu estado de cuenta cL, y luego dentro de corchetes, quieres pasar los parámetros cantidad, y tienes un segundo es precio y artículo. Cuando tienes más de un parámetro aquí, no pones una coma al final, así que esto termina así También quieres pasar estos parámetros aquí para que reflejen tu entrada de función. Entonces lo que tenemos aquí es que estamos actualizando la tabla de tienda y establecemos el valor de la columna cantidad y la columna de precio a estos valores, pero solo para aquellas filas donde el artículo será igual a un valor dado. Entonces le damos ese valor a este de aquí y los dos primeros a estos. Entiendes la idea. Guarda el guión y debes llamarlo aquí. Entonces déjame comentar esto y actualizar. Entonces, ¿qué cantidad quieres pasar? 11, digamos. Y el precio era de cinco. Digamos que subiría hasta seis, y qué ítem quieres actualizar? ¿Vaso de agua? Eso es. Guarda tu guión y pruébalo. Y obtuvimos estos valores actualizados como esperábamos. Y eso es lo que quería enseñarte en esta conferencia. Podría ser más práctico tener realmente una identificación aquí. Entonces decimos cantidad y precio donde el ID es igual a un número, así no tenemos que pasar el nombre completo cual puede ser confuso o es propenso a los usuarios. Entonces en ese caso, nos gustaría cambiar la tabla aquí, y nos gustaría agregar una clave primaria que todos los incrementos. Pero aprendes a hacerlo en la siguiente sección del curso. Entonces ahí te voy a mostrar cómo hacer el programa del mundo real, y eso lo implementaremos en ese programa. Entonces estos fueron algunos ejemplos triviales, y te haces una idea mucho mejor en la siguiente sección Entonces a continuación saltaremos a SQL de postgrado y trabajaremos con el ciclo PG two library. Hablarte más tarde. 165. Base de datos PostgreSQL con Python: Bienvenidos a esta conferencia. terminamos con SQLite tres, así que espero que hayas podido construir este guión que te mostré a este guión que te mostré lo largo de las conferencias anteriores Porque en esta conferencia, vamos a utilizar este script, pero lo voy a modificar para que sea compatible con la interacción con bases de datos SQL de post grade. Entonces, afortunadamente, la mayor parte del código es el mismo con algunos ligeros cambios. Por supuesto, necesitaríamos otra biblioteca llamada Psycho PG two Y luego vamos a agarrar métodos de esa biblioteca. Y a diferencia de SQLite tres, psycopg two necesita ser instalado, por lo que es una biblioteca de terceros No viene como una biblioteca Python incorporada. Entonces necesitas psychopg two instalado, y también necesitas postgrado QL instalado Entonces en esta conferencia, me gustaría mostrarles cómo instalar PostGraql y psychopg Todo bien. Esta es la página web oficial de PostGrasQL y solo puedes ir a descargas aquí abajo Y luego quieres encontrar tu sistema operativo. Entonces PostGraqul funciona en Mac, Linux y Windows, Solaris Entonces estoy en Windows. Simplemente voy a hacer clic en Windows, y cuando instales Postgrasul, también estás instalando el PG Admin tres, que es una herramienta gráfica donde puedes ver Estás familiarizado con MySQL, PG admin es equivalente a PHB Madmin Post grad QL también viene con un stack Builder, que es un paquete que puedes usar para descargar e instalar otras extensiones SQL post grad Entonces digamos que quieres una extensión para datos espaciales, así que para almacenar datos espaciales en PostQL para que puedas usarlo para aplicaciones JS Entonces hay una extensión para eso llamada Post GS. Entonces de todos modos, te voy a mostrar cómo instalar extensiones. Primero, necesitas descargar PostgreSQL y yo estoy en Windows, así que voy a hacer clic en esto Y esperaré un rato hasta que termine mi descarga. Entonces voy a pasar rápidamente por el proceso de instalación. Entonces solo me preguntan dónde quiero instalar Post grass QL, y dónde se almacenarán mis datos Y aquí debes tener cuidado con estas credenciales. Entonces tu superusuario, los que tienen la mayoría de los privilegios para tus bases de datos, y tu nombre de superusuario es Postgres, y de hecho me gustaría crear un Un archivo de texto sólo para almacenar mis credenciales. Yo también me gustaría decir la contraseña. Uno, dos, tres. Bien, entonces entro postgresa uno, dos, tres por contraseña Después siguiente, este es un puerto de su servidor de su servidor de base de datos. Entonces me gustaría tomar nota de esto también. Se trata de tu configuración local, así que simplemente dejaré este valor predeterminado. Y solo tendrás que esperar un rato hasta que termine la instalación. Bien, eso fue un éxito. Ahora bien, si quieres lanzar Stock Builder para instalar extensiones para la base de datos de escala de postgrado, posible que quieras tener esto verificado así que este es mi servidor de base de datos. Y aquí tienes un montón de extensiones que quizás quieras instalar, por ejemplo, extensiones espaciales, y tienes Post gs para 32 bit y Post Gs para 60 para bit. Si hago clic en Siguiente, esto me dice que necesitan un paquete al menos para ser instalado Déjame solo instalar Post gs. Bien, acepta la licencia de Poss y luego solo ve a continuación Esto me está preguntando sobre DEL, que es otra interfaz para los datos GIS. Bien, fue difícil instalar extensiones externas. Si quieres volver a Stack Builder más tarde, tu Stack Builder debería estar aquí o simplemente puedes ir a Postgres SQL, y aquí tenemos PG admin también, y aquí está la etiqueta de aplicaciones Builder Bien, pero si quieres trabajar con Python, quieres acceder a las bases de datos PostGraqul a través de Python, así no tienes que interactuar con estas La forma de interactuar con PostGrasqul con Python es instalando Psycho PG two, y puedes instalar psychopg two y puedes instalar psychopg Sin embargo, puede que te encuentres problemas porque cyclopedia two está escrita en C, por lo que necesitas un compilador C instalado en tu sistema en Windows, al menos, no tienes este problema en un Mac y Linux, estoy bastante seguro La solución a esto, en realidad hay algunas soluciones. Una de las soluciones es que tal vez quieras instalar un estudio visual en tu máquina Windows, pero ese es un programa bastante grande y no me gustaría instalarlo. Entonces la segunda solución, que más prefiero es usar bibliotecas Python pre compiladas. Y puedes encontrar casi cualquier biblioteca Python que requiera un compilador C. Puedes encontrar esas bibliotecas en esta página servida por Christoph Entonces estamos buscando una llamada SIP. PG dos. Aquí tienes los archivos de la rueda. Por lo que un archivo de rueda es un archivo que se puede instalar con PIP. Entonces, ¿qué haces cuando instalas algo con PIP PIP instala Psycho PIP es descargar el archivo We desde un servidor remoto, y luego lo instala en su sistema Así que aquí puedes buscar tu versión. Este sería el archivo para mi sistema. Así que solo consigue esto de aquí y pegarlo aquí para que pueda acceder a él desde la línea de comando atom. Entonces aquí está el archivo que acabo de descargar. Así que solo sigue adelante y pip instala, y luego necesitas apuntar al archivo Well Entonces eso va a Oliged. Y eso se instaló con éxito. Puedo verificar rápidamente si eso está disponible. Y parece que está funcionando. También puedes consultar la versión de tu biblioteca si quieres. Entonces es 2.6 0.1. Bien, entonces en la próxima conferencia, nos conectaremos a la base de datos a la base de datos post gradsqll, y luego estaremos creando tablas e insertando datos, viendo, borrando y actualizándolos Entonces, sigamos adelante. 166. PostGreSQL: selección, inserción, eliminación y actualización de registros SQL: Muy bien. En esta conferencia, aprenderá a conectarse a una base de datos Post GradesCL y a crear tablas en una base de datos post gradescule, datos tienda, ver datos y eliminar y actualizar filas también Sin embargo, el script que estás viendo ahora es un script que construiste en las conferencias anteriores usando la base de datos SQLi Entonces, si no has visto esas conferencias, te recomiendo encarecidamente que las pases primero, luego vienes aquí. Porque en esta conferencia, solo voy a revisar este código y reemplazar solo unas pocas líneas de y eso sugiere que el código que usas para la biblioteca Q tres es muy similar al código que usaremos para psycopg two, que es una biblioteca que usas para conectarte a bases de datos postgrascue La principal diferencia es que su base de datos no será un archivo DB almacenado en su sistema de archivos. Será una base de datos incrustada en tu instalación post grascule Y así el primer requisito es que necesites tener una base de datos existente en tu servidor de base de datos. Post grass sQUL viene con una base de datos predeterminada. Así que una vez que instales PostgreSQL, tendrás una base de datos llamada PostGres, por lo que puedes simplemente pasar la base de datos aquí, o si quieres, puedes crear Así que solo necesitas ir a tu instalación de PostgreSQL, y puedes crear una base de datos a través Entonces aquí están sus servidores de base de datos, y este es uno predeterminado. Primero necesita conectarse a su servidor de base de datos. Que esta sería la contraseña que creaste al instalar Postgress PostGress 123 era mío. Todo bien. Así que me conecté con éxito, y tengo tres bases de datos. Entonces esta es la base de datos predeterminada de la que estaba hablando, y estas son otras dos bases de datos que he creado. Entonces, para crear una nueva base de datos, simplemente haga clic derecho sobre las bases de datos y la nueva base de datos. Digamos base de datos uno, y es necesario especificar el propietario, por lo que el usuario de su base de datos. PostgreST es lo que especificé cuando detengo Postgres UL, esto debería ser suficiente Bien, entonces ahora tienes una base de datos aquí. Si haces clic a eso, te conectarás a él. Ahora solo puedes cerrar esto y volver a Python. Bien, permítanme primero comentar estas líneas para que cuando ejecute el script, no me llamen a estas instancias de función. Entonces tenemos una base de datos vacía. Entonces lo primero que nos gustaría hacer es crear una tabla. Pero antes que nada, me gustaría cambiar esto también. Psycopg dos. Y claro, me gustaría hacer un reemplazo por lotes de SQ L tres, reemplazarlo por PG dos. Entonces quiero que todos estos nombres de bibliotecas aquí sean reemplazados por Pycopg dos Así que reemplace todo y solo presione escape. Eso se va. Por suerte, este código es el mismo que la biblioteca SQLite tres. Entonces tenemos connect y luego tenemos el objeto cursor, luego tenemos el método execute commit y close. Todo lo que tenemos que hacer es cambiar los parámetros aquí. Y aquí nos gustaría pasar el nombre de la base de datos, el nombre de usuario, el host, la contraseña y el número de puerto de su servidor de base de datos. Y todo eso viene dentro de las citas. Por lo que se pasa como una cadena al método connect. Primero, tenemos un nombre de base de datos. Entonces el parámetro dbname y que será igual a un valor Por lo que es necesario insertar el valor dentro de comillas simples. Entonces esa es la base de datos. Bueno, el nombre de la base de datos. Entonces tienes usuario, y ten en cuenta que no necesitas usar comas aquí Entonces todo esto va como una cadena y se lee como una cadena por el método connect. Entonces el usuario va dentro de comillas, post grass, luego tenemos la contraseña, post grass, uno, dos, tres, luego tienes el nombre de host, entonces el parámetro host. Ese debería ser anfitrión local. Todo bien. Entonces, el anfitrión local debería ser tu nombre de anfitrión y siempre es así. Y por último, tenemos el número de puerto, y eso va dentro de las cotizaciones también. Entonces 532. Entonces esos son los parámetros que pasas a tu método connect o al ciclo PG two library. Entonces intentemos llamar a esa función. Así que crear tabla es una función, y voy a guardar el script. Así que déjame asegurarme de que sabes lo que está pasando aquí. Entonces nos conectamos a la base de datos, y luego tenemos los mismos métodos para el ciclo PG two library. Entonces estamos creando una tienda de nombres de tabla, y luego tenemos tres columnas para esa tabla. Y nos comprometemos esos cambios y cerramos la conexión. Así que guarda el guión. Control S. Alan, llama al guión. Y eso parece acertado. Si te gusta, solo puedes ir a PG en Mean. Y aquí puedes ver la tabla que acabas de crear. Entonces solo ingresa la contraseña, y necesitas ir a tu base de datos. Entonces base de datos uno, expanda eso. Entonces hay que ir a esquemas, mesas públicas. Y este es nuestro nombre de mesa. Entonces tenemos la mesa de la tienda, y tienes tres columnas, cantidad de artículo y precio. Todo bien. Tenemos una tabla vacía, así que sigamos adelante e insertemos algunos datos a esa tabla. Simplemente copiaré esta cadena de conexión y la pegaré. Aquí dentro. Entonces recuerda que usamos interrogación al insertar valores para bastantes tres, si quieres, podrías usar marcadores de posición de formato de cadena Entonces, uno por el artículo, uno por la cantidad, y otro por el precio. Entonces después de la coma, permítanme retrasar esto. Después de la cita, perdón, pasas el porcentaje, así ya conoces el formato de cadena, y luego especificas la tupla de las variables en las que quieres insertar Así que la cantidad del artículo y el precio. Entonces puedes usar esto, pero esto sería propenso a las inyecciones SQL de los tuckers Entonces no es una buena idea. Puedo seguir adelante y ejecutar esto en realidad solo para ver qué pasa. Entonces digamos abril y diez y 15 por el precio. Y déjame ejecutar esto. Entonces parece que funcionó, y podemos comprobarlo en la tabla aquí. Así que solo puedes ir a tu base de datos, que es la base de datos uno. Y aquí puedes ejecutar una consulta SQL simple, seleccionar todo de tienda ve a Ejecutar y ves que Apple fue agregado a la tabla. Entonces funciona, pero es arriesgado usar el formato de cadena Python. Entonces lo que quieres hacer es que lo dejaré ahí por un tiempo para que compares las cosas y para evitar inyecciones de escull, en realidad deberías pasar tus variables como segundo parámetro al método execute Entonces, ¿qué significa eso es que no tienes que usar odas, así que solo pasas el porcentaje S, así como así Entonces pones una coma aquí así que eso significa que esta cadena aquí dentro de comillas dobles es un argumento, y entonces este de aquí es el otro argumento Entonces pasas tus variables, así que eso debería funcionar ahora. Entonces estoy seguro que puedes ver la diferencia entre esto y esto. Y solo voy a comentar esto para que no se ejecute. Y digamos naranja. Mismo precio y cantidad ejecutar. Y vamos a checar PG Mad Man. Entonces déjame ejecutar de nuevo la consulta. Y ya ves que las naranjas agregaron como neuro a la mesa. Entonces este es el camino a seguir y voy a borrar esto. Todo bien. Ahora veamos la función view. Entonces, lo que está haciendo la función view es que se conecta a la base de datos, y selecciona todas las filas de la tabla de la tienda. Luego almacenamos esas filas en la variable de fila usando el método fatal. Después devolvemos esas filas como una salida de función. Todo lo que necesitas cambiar aquí es argumento del método connect. Así que solo ponlos aquí. Y debería ser bueno para ir. Así que déjame ver llamar a la función y ejecutar. Y sí, tenemos que imprimirlo. Lo olvidé. Sí. Así que tenemos April y ahora tenemos tres naranjas porque justo cuando ejecuté el script aquí, obtuve la función insert ejecutada de nuevo, así que obtuvimos dos naranjas y otra cuando usas marcadores de posición de formato de cadena Entonces entiendes la idea. Echemos un vistazo a la eliminación. Función. Nuevamente, necesitamos pasar argumentos de conexión psicofg dos Entonces tenemos eliminar de la tienda donde el artículo, nuevamente, no podemos usar el signo de interrogación, por lo que necesitamos usar porcentajes. Y luego como segundo argumento, pasamos la variable item. Entonces es lo mismo que cul tres, pero aquí usamos porcentajes Y déjenme llamar a eliminar. Voy a comentar esto y eliminar aquí. Entonces lo que quieres eliminar es el ítem, ¿qué ítem? Digamos que queremos eliminar filas donde el ítem es igual a naranja. Entonces veamos cómo va esto. Sí, el artículo fue eliminado. Se eliminaron las filas con el ítem naranja y obtuvimos la función view ejecutada, así que ahora tenemos una fila. Nuestra mesa tiene sólo una fila. Un vistazo rápido al método updates ahora. Así como así. Y aquí estamos actualizando la tabla de la tienda, y ahí estamos configurando, por lo que estamos actualizando la cantidad a este valor y el precio también a este valor donde el artículo es igual a este valor. Bien, entonces tenemos uno, dos, tres valores y pasamos tres variables aquí después de la coma Entonces, como segundo argumento del método execute, y el método update obtiene tres argumentos. Entonces déjame comentar esto y actualizar, solo tenemos una fila. Entonces me gustaría establecer la cantidad de manzanas a digamos 20. Y el precio, mantengamos el precio igual. Y para el artículo Apple así como así y ejecutar. Y conseguimos que la cantidad se cambiara a 20. Entonces eso fue todo. Creo que eso fue bastante sencillo. Entonces, si aprendiste S como tres antes, esto fue bastante sencillo para ti. Y si tienes alguna duda, no dudes en dejarlas caer en la sección de discusión. Estaré encantado de responder. Nos vemos en la próxima conferencia. 167. Aplicación 6: aplicación de inventario de libros: Bienvenido a esta nueva sección. Y en esta sección, vas a aprender a construir un programa real que permita al usuario almacenar información sobre libros. Entonces ya construí ese programa, y te voy a mostrar paso a paso cómo puedes hacer lo mismo. Tengo el programa aquí, y es un archivo ejecutable. Entonces, además de aprender a construir el programa punto pi, también aprenderás a construir archivos ejecutables que se ejecutan en Windows y el archivo de aplicación punto que se ejecuta en una Mac. Así que básicamente puedes darle tu programa a cualquiera y no es necesario que tengan Python instalado en su computadora. Entonces llamo al programa Librería. Y esto fue construido principalmente con Kinte, que es una biblioteca de interfaz gráfica de usuario, y la biblioteca ASQ Light three, que es una biblioteca para interactuar con la base de datos ASQE Entonces lo que tenemos aquí son cuatro entradas donde se puede ingresar un nuevo registro de libro. Entonces digamos que tienes un libro nuevo en tu tienda y quieres agregarlo en tu base de datos. Y aquí puedes ver todos los libros que se han agregado al programa. Se puede agregar un nuevo libro, digamos, Pitones para el título rdt rápidamente Tienes el número ISBN, que es el número de identificación único para los libros. Es bastante largo. Digamos así, y agregas entrada, y luego vuelves a ver todo y verás que la nueva entrada fue agregada a la base de datos. Entonces cada registro que veas aquí está realmente almacenado en una tabla dentro de esta base de datos Light one. Entonces tienes algunos otros botones aquí. Entonces, si quieres, en realidad puedes buscar entrada para un registro, buscar entrada, y luego mostrará la entrada que busques. Al hacer clic en la entrada, obtienes todos los campos se muestran en cada uno de los libros de texto aquí Resuelva todo de nuevo, y también puede actualizar y eliminar registros. Y por último, se puede cerrar la ventana. Entonces no es una gran interfaz de usuario. No soy un gran diseñador de interfaces de usuario, pero aprendes mucho construyendo este programa. Entonces es bastante larga , pero dará sus frutos . Así que vamos a patearlo. 168. Diseño de la interfaz de usuario: Hola ahí. Y en esta conferencia, lo que vas a hacer es empezar a construir nuestro programa de librería Específicamente, vamos a trabajar en la interfaz gráfica de usuario porque, ya sabes, este programa tiene dos partes, por así decirlo. Entonces tiene un backend y tiene front end. El back-end es el código de base de datos Sculi tres. Entonces el código que interactúa con la base de datos. Y el front-end es el código de la biblioteca Tkinter. Entonces el código que construye todos estos botones, estas entradas, este texto, y este cuadro de lista, y esta barra de desplazamiento. Así que normalmente tendrías que elegir si quieres trabajar primero en el código de back-end o si quieres comenzar a construir el código front-end. En primer lugar, sin embargo, lo primero que quieres hacer es en realidad comenzar a definir algunos requisitos. Entonces quieres decir lo que hará tu programa. Entonces, digamos que quieres que tu programa muestre una lista de los registros actuales. Entonces, cuando presionas VO, ves la lista de registros aquí. Y luego quieres que tu programa busque una entrada actual, y luego quieres agregar Andrea y actualizar y seleccionar datos. Y luego quieres que el programa cierre la ventana. Entonces básicamente, estos son nuestros requisitos, y ahora puedes elegir comenzar a escribir el final de Beck, así podrías escribir una función que seleccione todos los datos de la base de datos. Entonces podrías devolver esos datos como texto. Así que puedes simplemente imprimirlos por ahora, si quieres escribir primero el back end porque no tienes el front-end, aún no tienes la interfaz gráfica de usuario construida. Así que solo puedes escribir funciones del back-end y luego imprimir la salida. O puedes empezar a escribir primero el front end. Entonces construyes esta interfaz gráfica de usuario. Pero cuando haces clic en esos botones, no pasa nada. Entonces básicamente, solo dibujas esta cosa con Python. Y una vez que lo has hecho, comienzas a construir el back-end, y luego conectas todos los widgets y todos los comandos de estos botones con tus funciones de back-end. Entonces es cuestión de preferencia si eliges trabajar primero con el back end o el front end. En este curso, en esta sección, vamos a construir primero el front end. Así que vamos a construir una interfaz gráfica de usuario que no hará nada por un tiempo hasta que la conectemos con el back-end. Muy bien entonces. Me gustaría primero quitar esta barra vertical aquí porque voy a dibujar aquí la interfaz gráfica de usuario. Entonces voy a hacer un boceto para que veas y que tengas el boceto aquí todo el tiempo. Entonces, para eliminar esta barra, si tienes curiosidad, solo puedes ir a ajustes. Después hay un paquete que en realidad muestra esa barra que se llama guía de rap, y se quiere desplazar a todas las pantallas una línea del ocho carácter en el Y eso puede ayudarte si quieres te puede ayudar a mantener un patrón en particular. Entonces no quieres tener más de 80 caracteres en tu código. Entonces esa barra te ayuda a mantener esa regla. En fin, no queremos eso, así que lo acabo de quitar. Y sólo voy a escribir unas notas dentro de la cadena de documentos. Entonces sabes que una cadena de documentos es como una línea de comentarios. Entonces, si pones algo dentro de estos códigos triples, esto no es leído como código por Pathon sino que es como una cadena de documentación Entonces solo para que los humanos lo lean. Entonces digamos que quiero un programa. Eso almacena la información de este libro. Así título y autor e ISBN. Entonces el número de identificación para libros. Y el usuario puede ver todos los registros. Pueden buscar una entrada y agregar una entrada, actualizar una entrada, eliminar y pueden cerrar el programa si así lo desean. Cerrar. Ocho. Entonces, si empiezas a pensar en eso, ahora querrías tener una interfaz gráfica de usuario que tenga todos estos botones para que el usuario pueda hacer estas acciones a través de algunos botones. Y luego piensas en cómo pueden ver los registros. Y ya sabes que Tkinter tiene el list box, widget que te permite mostrar texto como una lista. Así línea por línea. Y luego quieres que el usuario busque una entrada en una entrada de actualización de entrada. Entonces necesitas algunos widgets de entrada. Y luego, claro, querrías algunas etiquetas que puedan decir de qué se trata cada entrada. Entonces eso sería un widget de etiqueta. Y es posible que también quieras una barra de desplazamiento para que tu lista sea scroll así que si hay muchos registros, el usuario puede desplazarse por ellos y puede ver los registros debajo de la lista. Y así tenemos un boceto. Esto, por supuesto, requiere algo de fantasía y tal vez alguna experiencia con el diseño de interfaces de usuario. Pero es muy importante que tengas un boceto. Entonces voy a mantener este boceto en la pantalla mientras codifique el programa. Normalmente, en la vida real, querrías tener dibujo, tal vez en un papel real o simplemente en una pantalla digital. Pero es importante tenerlo, y ahora que lo tenemos, empecemos a construirlo en la siguiente conferencia. 169. Codificación de la interfaz del usuario final: Genial. Entonces ahora tenemos un boceto de nuestra interfaz gráfica de usuario, y eso debería facilitar las cosas. Así que ahora solo puedes seguir adelante y codificar tu interfaz gráfica de usuario en Python usando las características de Kiner Salt Kiner es una biblioteca que vamos a utilizar para hacer esta interfaz Y supongo que ya conoces a Kinder porque eso lo expliqué en una de las secciones anteriores Entonces, si no conoces a Kinder, por favor vuelve dos secciones antes de esto, y entonces podrás entender de lo que estoy hablando aquí Así que voy a mantener el boceto a la derecha. Y ahora sabes que para hacer una interfaz gráfica de usuario con Kiner, puedes usar los métodos pack para empacar tu widget o el método grid Usaremos el método de cuadrícula, así que podría ser una buena idea hacer realmente una cuadrícula en tu boceto. Para que cuando crees tus widgets, digamos que creas un fondo, querrás pasar el número de la fila y el número de la columna. Así que tener una grilla como esta facilitará las cosas. Todo bien. Y solo me gusta borrar esta cadena de documentos. No lo necesitamos, y me ahorra espacio para que puedas ver más un espacio de trabajo más limpio aquí. Todo bien. De skinerimport. Todo. Entonces no estoy explicando el código ahora porque ya sabes estas cosas. Si hay algo nuevo, voy a pasar por ello. Ventana es igual a TK, el método TK que crea un objeto de ventana, y luego se quiere aplicar el método de bucle principal, que es básicamente una forma de concluir todos los widgets que ingresará en este espacio ahora. Bien, entonces tenemos cuatro etiquetas aquí. Entonces tenemos título de etiqueta y autor aquí y ISBN. Así que sólo voy a crear fobels cuatro objetos label. Entonces voy a nombrar mis objetos, mis variables de L uno a L cuatro y usamos el método de etiqueta de objeto para eso. Ventana es la ventana principal, y el texto debe ser título. Entonces Control Enter, puedes ir a la siguiente línea, sin importar dónde te encuentres en la línea anterior. Entonces no tienes que simplemente cambiar, ir a aquí, y luego presionar Enter, solo presionar Control Enter y vas a la siguiente línea. L uno, se aplica el método de cuadrícula. Entonces la primera etiqueta es fila cero, columna cero también. Entonces puedes simplemente copiar esto y pegarlo tres veces más. Entonces eso sería L dos, L tres y L cuatro. Y también querrás cambiar el texto de tu etiqueta. Aquí y ISBN. Autor sería la columna dos, como se ve en el boceto. Entonces 02, entonces tenemos el aquí sería uno, cero, y luego 12 para la última etiqueta. Entonces veamos qué tenemos. Sólo me gustaría llamar a mi guión. Bien, parece prometedor. Ahora agreguemos las entradas. Entonces estos eran widgets estáticos. Ahora necesitamos agregar algunas entradas. Entonces A uno sería entrada. Y entrada obtiene la ventana como primer parámetro, al igual que cualquier otro widget lo hace. Y también un parámetro de variable de texto. Este parámetro de variable de texto, esto espera como argumento el valor que el usuario ingresará en el widget de entrada. Ese es un tipo de datos espaciales. Entonces primero necesitas crear realmente un tipo de datos aquí, un objeto de ese tipo de datos. Entonces llamémoslo. Estamos creando la entrada para el título, digamos el texto del título, igual a string vary. Entonces esta es la función que crea este objeto espacial. Eso sería igual a ese título sexo. Entonces, eso es todo. Y también necesitas grillar este widget de entrada así que grid. Y los primeros widgets del widget de título corresponden con la fila cero y la columna uno. Entonces, eso es todo. Rápidamente puedo multiplicar esto aquí y autor texto aquí texto y texto ISBN. También es necesario cambiar los números o menos variables así como así. Y, por supuesto, hay que pasar que el usuario ingresa aquí. Entonces esto debería ser y estos dos. Todo bien. Y por último, también se desea especificar las filas y las columnas para las entradas. Entonces sería cero, tres, y luego tenemos el widget de texto, uno, uno. Todo bien. Y la última entrada. Uno. Tres. Todo bien. Vamos a echarle un vistazo. Sí. Se ve bien. Genial. Y ahora es el turno de la caja de arrendamiento. Entonces llamémoslo Lista uno. ¿Por qué no? Eso sería igual a la ventana del cuadro de lista. Y luego quieres especificar la altura de tu última caja y el ancho también. Entonces pensé en poner seis y 35. Sería buena altura y anchura. Se pueden degustar diferentes alturas y anchos y ver qué viene mejor. Y entonces me gustaría calificar esto. Rejilla. Y así esto comenzaría en la fila número dos y la columna cero. No obstante, si lo dejamos así, las cosas no irán como esperamos. En realidad, podemos probar esto. Como se puede ver el cuadro de lista ocupaba sólo la primera celda. Entonces la primera celda de la primera columna en la fila cero, una, dos, así que la fila dos, la columna cero. Lo que queremos en cambio es abarcar estos list box en las otras columnas también y en las otras filas porque vamos a tener botones aquí más tarde, así que queremos abarcarlo. Y puedes ver el boceto aquí. Así que podemos agregar el parámetro row span, y eso sería igual a seis columnas span también. Entonces serían dos. Todo bien. Entonces eso sería un list box. Sin embargo, también necesitamos agregar una barra de desplazamiento allí para que la lista pueda desplazarse cuando haya muchos datos en la lista, muchos registros para adjuntar una barra de desplazamiento a La lógica aquí funciona así. Usted crea su barra de desplazamiento, luego le dice a su barra de desplazamiento sobre la lista que la barra de desplazamiento tiene que desplazarse Y luego le dices a tu lista también quién es su barra de desplazamiento. Así que primero vamos a crear el scroll una barra de desplazamiento independiente Entonces digamos SB uno. Método de barra de desplazamiento. Eso se toca a través de la ventana. Y luego aplicas el método verde. Entonces la barra de desplazamiento estaría en una columna tres. Y una vez que haya creado estos dos objetos, desea aplicar un método de configuración a la caja de arrendamiento y un método de configuración. Al objeto de la barra de desplazamiento. Y estos métodos de configuración obtienen argumentos. Entonces este sería el comando scroll, equivale a b un conjunto de puntos. Eso es. Entonces, lo que significa que la barra de desplazamiento vertical a lo largo del eje Y se establecerá en esta barra de desplazamiento, y luego se va al método de la barra de desplazamiento. Lo sentimos, esto tiene que ser configurado, entonces se pasa el comando igual a la lista de una vista Y. Entonces eso debería funcionar. Aquí está pasando un parámetro de comando, lo que significa que cuando se desplaza por la barra, la vista vertical de la última cambiará. Entonces veamos cómo va esto. Y parece que he estropeado algo aquí. He puesto la posición de la barra de desplazamiento en la fila uno, supongo, y en la columna tres. Entonces la barra de desplazamiento debería ser en realidad fila dos columna dos. Vamos a comprobarlo otra vez. Sí, parece estar funcionando. Aunque no se ve muy centrado porque necesitamos atravesarlo a través de las mismas filas que hemos abarcado la caja aquí Así que tenemos que agregar aquí un parámetro rowspan y configurarlo en otras seis barras de desplazamiento parece centrado Bien, así que ahora, lo que nos queda es agregar estos widgets de botón justo aquí Genial. Entonces tenemos seis botones. Empecemos por el primero. Tenemos el método del botón. Ventana y texto, por lo que los botones tienen texto. A es la primera. Y entonces pensé en poner un ancho de 12. Entonces B uno, despreciado. Esa sería la fila dos, columna tres. Y tenemos cinco botones más. Entonces voy a pegar este seis, creo. Entonces b2b3, cuatro, a las seis Por supuesto, estos botones no tienen un parámetro de comando ahora porque más adelante agregaremos aquí parámetro de comando, y eso decidirá qué harán los botones. Pero por ahora, eso está bien. Entonces estos botones estarán alineados en la columna tres, todos ellos, y cada uno tiene un valor de fila diferente. Y seis. Genial. Entonces veamos qué tenemos. Y boom. Se me olvidó poner un número de fila para el fondo cerrado. Siete. Y ahora se ve mejor. Entonces así fue como construir una interfaz gráfica de usuario. Por supuesto, estos botones no hacen nada por ahora. Entonces, en la próxima conferencia, te mostraré cómo adjuntar acciones a esta interfaz gráfica de usuario. Entonces trabajaremos en el back end y usaremos SQLite tres para interactuar con la base de datos y obtener esos datos en esta interfaz gráfica de usuario Entonces espero que mis rutinas y mis prácticas te ayuden a construir interfaces gráficas de usuario con EZ y te veré en la próxima conferencia. 170. Programación del backend de la aplicación: Hola, bienvenidos a esta nueva conferencia. Y aquí seguimos construyendo nuestro programa de librería que almacena y recupera registros de libros de una base de datos Hasta donde, ya sabes, hemos construido la interfaz gráfica de usuario con kinder Entonces este es nuestro guión. Entonces básicamente, tenemos el front-end de nuestro programa. Y ahora, entonces esta es nuestra interfaz gráfica de usuario. Y básicamente lo que tenemos que hacer ahora es adjuntar algunas funciones a todos estos botones. Entonces digamos, por ejemplo, cuando pulsamos el botón ver todo, se activará una función que seleccione datos de una base de datos SQL Lite y luego obtenga esos datos y los ponga en este list box aquí. Entonces eso significa que necesitamos crear una base de datos, base SQLite con SQLite tres También necesitamos crear una mesa primero. Así que podríamos hacer esto en el script, pero prefiero realmente crear otro script y luego importar ese script aquí. Entonces Import, llamemos al nuevo backend de script. Entonces necesitamos crear un back end que Pi script. Todo bien. Y ahora quiero cambiar el nombre de esto fuera de mi guión de front-end para que mantengamos el mismo patrón. Entonces digamos front end. Todo bien. Así que ahora estamos en el guión de front-end, y aquí estamos en el guión de back end. Entonces lo que eso significa es, digamos que creas una función de vista, modo que selecciona los datos la base de datos y creas esa función aquí, y luego vas al botón ver todo, y luego en el parámetro de comando aquí, y eso sería igual. Entonces digamos comando solo para darte una idea, comando es igual a back end y el nombre de la función. Entonces algo así. Todo bien. Espero que esto tenga sentido. No obstante, por ahora, sería genial si nos olvidamos de este guión. Así que debemos tener en cuenta la interfaz gráfica de usuario, pero es bueno no interactuar con estos widgets por ahora. Entonces lo que hacemos en cambio es imprimir las salidas de funciones, las funciones que construimos como cadenas en la línea de comandos aquí. Entonces no vamos a tirar esos datos en la menor casilla, sino en la terminal aquí. Todo bien. Empecemos a codificar. Importar SQLite tres. Eso es lo primero que quieres hacer. Y guardaré aquí una imagen de la interfaz gráfica de usuario para que sea fácil para ti referirte a ella. Entonces necesitamos crear una función de vista. Pero antes de eso, me gustaría crear una base de datos, así una conexión a la base de datos. Y me gustaría poner eso dentro de la función. Entonces digamos función connect. Y tenemos un objeto de conexión. Entonces eso sería un Scul three connect. Y llamemos a la base de datos libros punto dB. Todo bien. Entonces establecemos una conexión con la base de datos. Después definimos un objeto cursor así. Y a continuación, necesitamos ejecutar sentencia SQL. Así cursor objeto, ejecutar y sentar comillas dobles, introducimos la sentencia SQL. Entonces tenemos una base de datos, y también necesitamos una tabla en la base de datos donde almacenar la información de nuestro libro. Ahora, piénsalo en eso. Usuario cuando le das este programa al usuario, ellos ejecutarán el programa. Y cada vez que ejecutan el programa, tu script tiene que verificar si hay una tabla existente en la base de datos del libro. Entonces si hay una mesa, usted dice, no cree la tabla. Si no hay una tabla, querrás crear la tabla. Así que crea tabla si no existe. Y llamemos a un libro de mesa, solo para diferenciarlo del nombre de la base de datos. Y entonces querrías pasar algunos parámetros. El primer parámetro que me gustaría pasar es el ID. Así que no confundas esto con el número ISBN. La identificación del libro, esto es solo un número que partirá de cero, y se incrementará auto en uno para que tengamos el control de cuántos registros tenemos en la base Entonces es una buena idea tener este ID aquí, eso sería un entero, y necesitas configurarlo en clave primaria. Entonces esa es una columna obligatoria en tu tabla. Entonces tienes título como texto, autor, como texto aquí como entero, e ISBN, eso también es un entero. Bien, eso es todo. Quieres comprometer los cambios y luego cerrar la conexión. Bien, así que creamos una función connect. Posteriormente cuando vamos a ejecutar este script, por lo que el script de front-end, y luego se importa back end, este script, el script del back end. Entonces el código del back end será leído por Python. Pero si no has llamado a esta función, este código no será ejecutado. Entonces lo que quieres hacer en cambio es tener esta función. Se ejecuta cada vez que ejecutas esta función. Entonces ejecutas front end y esto importa back end, por lo que ejecuta todo el código Y esta línea aquí se ejecuta. Entonces la función se ejecutará cada vez que corras front-end. Todo bien. Espero que eso tenga sentido. O déjame explicarte eso mejor rápidamente. Entonces tenemos un script A punto pi, y tenemos el script B punto pi. Y en el script A punto pi, importamos el script B. Y lo que tenemos en el script B es una función PU que imprime algo en la pantalla. Oye, y guarda esto y guarda esto también. Entonces así cuando ejecutas un punto pi, no pasa nada por ahora porque acabas de definir tu script. Pero si llamas al script aquí, derecho, comida, seguro, y vuelves a ejecutar A, esta vez obtienes la salida de la función. Entonces esa es la idea. Gracias. Y volvamos a nuestro guión del mundo real. Todo bien. Ahora tenemos la función connect. Comencemos creando una función de función de inserción que insertará algunos datos en la base de datos. Entonces estoy empezando con la función insert porque esa es una función más fácil que la otra. Entonces me gustaría empezar primero por las cosas fáciles. Inserto de desarrollo. Entonces así es como llamo a mi función. Y piensa en eso tienes cuatro entradas ahí. Entonces esperas del usuario ingresar título autor y año y número ISBN. Entonces quieres pasar cuatro parámetros aquí, e ISBN. Todo bien. Y luego, por supuesto, necesitas conectarte a la base de datos. Debido a que esta función aquí, simplemente se conectará a la base de datos temporalmente, y comprobará si hay una tabla y cerrará la conexión. Entonces tienes una conexión cerrada aquí, cuando presionas el botón de inserción cuando presionas el botón de entrada, necesitas crear una nueva conexión a la base de datos. Y déjame seguir adelante y conseguir estas dos líneas también porque nosotros también las necesitamos, bien. Y aquí es donde ejecutamos nuestra instrucción SQL específica dentro de las comillas. Entonces lo que hará el botón Adentry es insertar. En libro, así valores de libro de tabla. Y aquí hay un truco ahora. Tenemos un ID aquí, así que este es un valor de incremento automático, así que no tenemos que pasar eso manualmente Y lo que podemos hacer en cambio es pasar un nuevo valor aquí. Y Python lo entiende, y creará el ID automáticamente. Y luego tenemos cuatro interrogación, uno para cada uno de nuestros valores. Entonces necesitas pasar tus parámetros como segundo parámetro de la función execute. Entonces como tupla aquí, título aquí e ISBN Bien déjame escribir otra función, y luego ejecutamos el script para probarlo y ver cómo va. Entonces def, digamos la función view. Entonces esto va a recuperar todas las filas de datos de la tabla. Entonces copiamos esto y los ponemos aquí. Entonces nos conectamos a la base de datos, creamos un objeto cursor, y luego ejecutamos una sentencia SQL. Y luego porque esta será una sentencia select, por lo que no realizaremos ningún cambio en la base de datos, por lo que no necesitamos un método commit aquí. Y esto en realidad es bastante sencillo. Seleccionar todo del libro. Así que en realidad necesitas devolver tu selección como un topple Entonces agarras esa selección y la pones en el cuadro de lista. Entonces quieres que la función view devuelva un topple. Entonces digamos rose, es igual a cur buscar todo y luego puedes cerrar la conexión, pero tus datos permanecerán almacenados en la variable rose, así que puedes simplemente devolver filas aquí. Todo bien. Entonces probemos el guión ahora. Y la forma de probarlo sería usando una declaración impresa. Entonces nos gustaría llamar insert, y luego ingresaríamos algunos datos manualmente. Entonces, en el programa real, esta función de inserción se ejecutará en algún lugar de la entrada de anuncios. Botón. Pero por ahora, necesitamos mantener las cosas simples y alcanzar nuestro objetivo paso a paso. Insertar, pasemos aquí algunos valores título. Digamos la C y luego autor John tablet. Todo bien. Y aquí hay un entero, así que solo necesitas pasar un número e ISBL así es un entero Entonces no hace falta ponerlos dentro de las cuotas. Y luego también quieres imprimir la salida de la función view. Genial. Entonces veamos cómo va esto. Ese sería el guión de back-end. Genial. Por lo que el registro se insertó en la base de datos y se imprimió desde la función de vista. Si vuelves a ejecutar el script, obtendrás dos registros porque la función insert se ejecutó dos veces. Todo bien. Parece que va bien. Entonces, ¿qué más tenemos? Tenemos una función de búsqueda. Y pondríamos en práctica una o búsqueda. Entonces, lo que eso significa es que el usuario ingresará un título o un nombre de autor o el año o el número ISBN, o bien podrá optar por ingresar todos ellos al mismo tiempo. Pero si digamos que solo ingresa al año, obtendrá todas las filas correspondientes a ese año. Entonces aquí tenemos que pasar cuatro parámetros también. Bn bien. Y luego Necesitamos estas líneas de código, así que conéctate a la base de datos, objeto cursor, y luego ejecutarlo. Así que vamos a quedarnos aquí por un tiempo. Queremos seleccionar todos del libro donde título es igual a algo o autor es igual a algo o año igual a algo o ISBN. Y entonces el segundo parámetro sería la tupla de los argumentos, PhtalesBN Entonces necesitamos recuperar todas las filas que serán devueltas de esta consulta y almacenarlas en esta variable rows, cerrar la conexión, y nuevamente, devolver filas Todo bien Un problema aquí, sin embargo, que podemos encontrar es que el usuario puede querer pasar, digamos, el nombre del autor solo a las entradas. Por lo que esta función obtendrá sólo los argumentos para el parámetro author. Estos otros parámetros permanecerán sin valor. Y luego obtendrás un error porque tu función está diseñada para tener cuatro parámetros. En ese caso, querrás pasar algunas cadenas vacías como valores predeterminados. Todo bien. Y estos dos. Entonces ahora, si el usuario pasa un nombre de autor, digamos John Smith, esta instrucción SQL buscará un título vacío o por el nombre del autor John Smith o por un Ear e ISBN vacíos y así sucesivamente. Y devolverá todas las filas con John Smith como nombre de autor. Bien. Entonces digamos esto y pruébalo. Entonces tenemos connect, insert to print view. Digamos que la Tierra. Estoy insertando otro disco aquí. John Smith. Todo bien. Y luego, digamos, imprime la búsqueda, y quieres pasar algunos argumentos. Por ejemplo, autor equivale a John Smith. Todo bien. Sin presupuesto aquí. Y veamos cómo va esto. Así que llegamos aquí esta lista de filas de la función view porque también tenemos la función view aquí. Y entonces la función de búsqueda nos devolverá esta fila. Entonces la fila con ID tres y con John Smith como autor. Entonces eso está funcionando bien. Sigamos adelante y construyamos una función Diluir. Entonces pensemos en cómo el usuario quiere eliminar un registro. Así que lo más probable es que quieran ver algunos discos en la su caja. Entonces querrían seleccionar uno de los registros. Digamos el registro de ID tres, la Tierra, John Smith, etcétera Entonces lo seleccionarían y luego presionarían el botón de borrar. Entonces eso significa que primero queremos tomar la selección de la lista, así que la selección del list box, tomaríamos como tuplas, pero pensaremos en eso más adelante Entonces vamos a agarrar eso como una tupla. Esa tupla tiene números de identificación únicos o el ID. Entonces nos gustaría hacer referencia a ese ID y luego ir a nuestra tabla de base de datos y eliminar la fila con ese ID. Entonces espero que no sea muy confuso en la función delete, por lo que esperaríamos el ID de la tuple que seleccionará el usuario Y entonces nos gustaría tener este código y empezar desde ahí. Entonces conéctate a la base , objeto cursor, ejecuta una sentencia. Todo bien. Veamos cómo va esto. Entonces queremos eliminar del libro donde ID es igual a algo. Genial. Y entonces ese algo es el parámetro ID. Entonces el argumento de este parámetro aquí, y este es el nombre de la columna. Así que no confundas esto con este parámetro de función de nombre de columna No olvides la coma aquí. Y si, eso es básicamente todo. Vamos a guardar este script ahora, y vamos a ejecutarlo. Allí insertamos algunos datos. Digamos que el sol esta vez. Y así tendríamos la C, la C otra vez, la Tierra, y el sol, así me gustaría borrar la Tierra. Y me gustaría ponerlos aquí, eliminar. Entonces la Tierra tiene una idea de tres. Entonces nos gustaría pasar tres aquí. Entonces veríamos todos los registros actuales una vez que los hayamos eliminado. Todo bien. Entonces aquí están nuestros registros, y la Tierra ha desaparecido. Entonces está funcionando muy bien. Nuevamente, como dije, esta identificación se extraerá de la tabla. Por lo que la tupla tendrá el ID como primer ítem. Y así básicamente vamos a partir de Tuple, obtener el ítem con índice cero, y pasaremos ese primer ítem a esta función de eliminación Genial. La función sería actualización. Actualización. Y nuevamente, ¿cómo quieres actualizar los registros? Entonces, ¿cómo querría el usuario actualizar un registro? Bueno, de nuevo, pueden esperar seleccionar una fila del list box del cuadro Tinder is, y los valores de esa barra se muestran en los widgets de entrada. Entonces a partir de ahí, el usuario puede querer cambiar una de esas celdas de esas entradas y presionar la parte inferior de actualización. Entonces nuevamente, obtendremos la selección del list box, luego nos referiríamos a la idea. Entonces ID aquí como primer parámetro, pero también nos gustaría obtener los nuevos valores que el usuario querría de esas entradas. Entonces digamos que el usuario quería cambiar el título del sol a la luna, digamos, y tú obtendrías ese título. Entonces el título estará en la casilla de entrada y pasarlo aquí. Lo mismo para autor aquí y ISBN Todo bien. Y entonces querrás actualizar tu tabla. Así que actualiza la tabla donde el ID es igual a este. Actualizar tabla con estos nuevos valores, donde ID es igual a este. Antes que nada, sin embargo, necesitamos obtener todas estas filas. Todo bien. Así que actualiza , reserva, y dices set. Entonces el título del conjunto de palabras clave es igual al signo de interrogación. Lo mismo aquí, signo de interrogación e ISBN es igual a signo de interrogación. Así que actualice libro y establezca estos valores donde ID es igual a otro signo de interrogación. Entonces entonces pasamos un triple aquí. Entonces ID, título, autor e ISBN. Entonces se ve bien. Cometemos los cambios y cerramos la conexión. Y veamos cómo va esto. Entonces actualmente, tenemos las filas en la tabla, la C, la C otra vez, el sol. Sí, estas tres filas. Y actualicemos el sol. Entonces quiero comentar esto primero y también eliminar. Entonces, centrémonos en la función de actualización y actualización. Entonces querrías pasar la idea de la fila para que quieras actualizar. Y luego quieres pasar los valores en el orden correcto. Entonces lo que quieras para el nuevo título, digamos, la luna. Y luego en la interfaz real en la interfaz gráfica de usuario, si el usuario quiere cambiar solo el título, dejará los otros valores como están. Por lo que estos valores serán reemplazados por los valores existentes. Entonces John Smith y año 1919 el número ISBN. Pero en este caso, sólo estamos en modo gusto para que podamos pasar estos valores. Suave. Todo bien. Y un número. Entonces veamos cómo va esto ahora. Y parece que no funcionó. El sol sigue ahí. Entonces veamos qué tenemos aquí. Actualizar Título Autor aquí, ISBN, donde IDs. Entonces la identificación debería estar al final del derrocamiento aquí. Hmm. B, ya sabes, los ponemos en el orden correcto que hemos establecido aquí. Entonces probemos esto otra vez. Hm. Ahora está funcionando. Entonces el ID cuatro fue reemplazado a la luna, John Smooth, y los otros valores. Genial. Entonces creo que tenemos listo el guión de Ben. Y lo que necesitamos ahora es adjuntar todas estas funciones a nuestros botones. Entonces todavía tenemos trabajo por hacer, y lo haremos en la próxima conferencia. 171. Conectar la interfaz de usuario con la interfaz de usuario, Parte 1: Hola, bienvenido de nuevo. Y este es el empujón final que le daremos a nuestra aplicación. Entonces, al final de esta conferencia, tendrás un programa completamente funcional que puede almacenar y recuperar registros de libros en una base de datos ASQE Lit Entonces, como saben, tenemos dos guiones. Tenemos front y dot py, y tenemos el script back end dot pi. Hemos terminado completamente con el script Bend dot pi. Por lo que hemos construido todas nuestras funciones que se conectan a la base de datos y tercera vista buscar y eliminar y actualizar datos. Y ahora tenemos que ir al script de front-end porque necesitamos modificarlo un poco para que el script front end sea capaz de buscar para obtener datos del script back end o más específicamente, sea capaz de obtener las salidas de función que son básicamente tuplas Y luego inserte esas tablas de datos en el list box. Entonces básicamente el usuario presiona un botón, y luego estas funciones se activan y los datos se insertan en el cuadro de lista. Entonces empecemos por las cosas más fáciles. Lo primero que me gustaría implementar es obtener los registros en el list box cuando el usuario presiona la vista o el botón. En primer lugar, como mencioné antes, necesitas importar aquí el script de Ben para que luego puedas referirte a tus funciones como algo así como backend dot view, por ejemplo, para la función de vista de base No, he estado mencionando que para adjuntar una función a un fondo, hay que ir a donde haya definido ese fondo. Entonces a la función inferior, y luego agregas un comando aquí. Entonces comando y luego va aquí va la función. Ahora bien, si solo llamamos a la función view del script Bend. Entonces, si hacemos Vista de vista doblada, todo lo que estamos haciendo es simplemente ejecutar la función view, así que no estamos insertando ningún dato en el cuadro de lista. Entonces lo que queremos hacer es tener otra función y tener esa función, tomar los datos de la función view e insertar esos datos en el list box. Por ejemplo, llamemos a ese comando de vista de función. Así como así. Recuerda, aquí no pasas corchetes porque si lo haces cuando ejecutas el script, esta función aquí, si te gusta esto, esta función se ejecutará cuando Python lea tu script, pero no quieres eso. Quieres eso cuando presionas el botón cuando el usuario presiona el botón. Esta función es ejecutada. Entonces Tkinter lo sabe y si solo pasas esto así, Python Tkinter lo ejecutará cuando se presione el botón Entonces view command, y ahora necesitas una función de comando view. Entonces escribamos nuestras funciones justo aquí. El comando view. Entonces piensa en la salida ahora. La salida que estamos obteniendo es tupla. Entonces voy a ejecutar aquí la función view, así que print view solo para ver lo que tenemos, si la has olvidado. Así Python Band punto pi. Y así en realidad, tenemos una lista de tuplas. Así se derruca dentro de la lista. Y lo que queremos hacer ahora es insertar cada una de estas tuplas Entonces cada una de estas filas de base de datos como una nueva fila dentro de la lista dentro del cuadro de lista. Entonces lo que podemos hacer es que podemos iterar a través de esta tupla. Entonces eso sería para, digamos, una fila en vista de puntos de back end. Entonces esta es en realidad esta lista aquí. Entonces esto es en realidad un objeto y un objeto de lista. Y luego, Lista uno, creo, así es como se codifica nuestro list box. Sí, entonces es la Lista uno. Esa es una variable que sostiene nuestro inserto de punto de caja de arrendamiento. Y luego el método insert obtiene dos argumentos. El primer argumento es el índice donde quieres insertar tus valores. Entonces tienes un list box, y ese list box tiene varios lugares. Entonces tiene el primer lugar, y luego el segundo, tercero, y así sucesivamente. Entonces, si quieres ponerlo en primer lugar, ingresas cero. Si quieres ponerlo en el segundo, ingresarías un índice de uno aquí y así sucesivamente. Pero piénsalo en eso. Estamos iterando a través de estas tubles. Entonces vamos a la primera tupla, y luego nos gustaría ponerla, y quisiéramos poner esta tupla como primer ítem de la lista Y entonces nos gustaría que el segundo se pusiera como segundo ítem, y así sucesivamente. Entonces en tales casos, el método insert también tiene un índice especial que se llama end, y luego se pasa la fila. Entonces lo que eso significa es que las nuevas filas se pondrán al final de la caja is. Entonces tienes esta fila y esta se pone la primera, y luego esta se pondrá al final de las filas existentes. Así que eso asegura que cada nueva fila se inserte al final del cuadro de lista. Entonces espero que quede claro. Y en realidad me gustaría ejecutar el guión. Entonces ahora tenemos el front end. No pastel. He cometido un error aquí. Entonces en realidad, quiero importar back end aquí así. Ejecute de nuevo. Y tenemos la interfaz. Entonces veamos qué tiene VO. Nombre revés no está definido en la línea cinco. Entonces sí, claro, no está definido porque aquí tengo un errata Curva. Todo bien. Vamos a intentarlo de nuevo. Ciérralo. A ver. Genial. Entonces obtuvimos las filas que se muestran en el cuadro is. Pero al presionarlo una y otra y otra y otra vez, estas filas se anexarán a las existentes. Así que tenemos que pensar en cómo podemos tener realmente un cuadro de lista vacío cuando presionamos la parte inferior. Eso en realidad es muy fácil de hacer. Tenemos que asegurarnos aquí que cuando se ejecuten estas líneas, el list box ya esté vacío. Entonces lo que podemos hacer es listar uno, eliminar y cero asegura que estés borrando todo desde el índice de cero desde la fila con índice de cero hasta el final hasta la última fila. Entonces veamos cómo va eso. Ve, y si presionas Vegain ver de nuevo, siempre obtienes todas las filas que tienes en la base de datos en la tabla Genial. Ahora sigamos adelante y definamos una función similar para la parte inferior de la entrada de búsqueda. Entonces el botón es este de aquí, entrada de búsqueda. Y nuevamente, queremos que el usuario ingrese al menos un valor en las entradas en las casillas de entrada, y luego presione el botón de entrada de búsqueda, y luego esperan que el programa devuelva las filas que contienen la entrada que el usuario ingresó en el cuadro de entrada. Así que de nuevo, querrás insertar datos en la caja. Así que de nuevo, puedes simplemente llamar a la función de búsqueda o al script Ben aquí comando. Entonces necesitas una función envolvedora. Entonces digamos comando de búsqueda. Otra buena razón por la que quieres usar estas funciones envolvedoras, por así decirlo, es que en algunos casos como este de aquí, estás pasando algunos parámetros a la función. Entonces, si nos fijamos en el back-end y la función view no tenía ningún parámetro, pero la función de búsqueda tiene algunos parámetros. Entonces eso significa que no se te permite poner corchetes aquí, así que tienes que usar otra función donde llamas a tu función principal de búsqueda de backend con parámetros, en realidad Y eso es lo que vamos a hacer ahora. Así def búsqueda, comando. Y nuevamente, el comando de búsqueda, lo que realmente obtenemos como argumento es title que el usuario ingresará un nombre de autor y aquí y número ISBN. Ahora bien, la forma en que vamos a obtener estos parámetros es a partir de los widgets de entrada. Entonces, ¿dónde está la entrada de entrada? Aquí están los widgets de entrada, y debes recordar que aquí tenemos este objeto string var. Esta variable que tiene la cadena son tipo de datos se dará como un valor, el texto o el número que el usuario ingrese en el widget de entrada. Así que tenlo en mente. Sigamos adelante aquí y lo primero que quieres hacer es listar un punto eliminar. Entonces quieres vaciar la lista. Todo bien. Y luego necesitas recorrer la salida de la lista de backend porque, ya sabes, en este caso, vamos a ejecutar esto rápidamente, así que el script de backend Entonces estamos buscando el nombre del autor John Smith, backend dot pi Bien, no tenemos ningún John Smith por el momento, así que busquemos a John Smooth. Así que ahí tenemos una lista vacía. Vuelve a guardar, y verás que tenemos una lista de topples. Entonces en este caso, solo tenemos una tupla, pero se entiende la idea Eso significa que necesitamos iterar a través de cuatro, fila de nuevo en back end, punto, búsqueda Y aquí hay que tener cuidado. Entonces la función de búsqueda tiene parámetros, y el primer parámetro será el texto del título. Entonces el texto que el usuario está introduciendo en el widget de entrada, widget de entrada de texto Sin embargo, no hemos terminado porque el texto del título es en realidad una cadena son objeto, por lo que no es una cadena simple. Y lo que tenemos que hacer es agregar un método get aquí, y esto generará un objeto de cadena Entonces, si el usuario ingresa la tarifa John Smooth en el widget, esto producirá una cuerda simple de John Smooth. Entonces espero que eso tenga sentido. Autor texto de nuevo, obtener método. Entonces tenemos año texto punto Obtener y por último ISBN texto punto Obtener. Entonces para una en la lista la función de búsqueda nos saldrá cuando busque en la base de datos, simplemente queremos insertar nuevos valores al final de la lista, así como así. Puedo ver que el resaltado de sintaxis no funciona aquí, así que probablemente tenga algún tipo de error tipográfico Aquí me falta una columna. Por lo que ahora cuatro y adentro estaban coloreados en púrpura. Bien, así que probemos el guión de front-end. Y busquemos al autor John Smooth. Bueno, obviamente, presiono el botón del agujero de vista, así que tengo todo aquí. Entonces quieres presionar el botón Buscar. Todo bien. Búsqueda de búsqueda. Y siempre muestra a John Smooth. Si dices ver agujero, lo muestra todo. Entonces parece estar funcionando. Y lo siguiente es en la entrada abajo. Entonces el usuario presiona en la parte inferior de entrada. Esperan que los datos que han estado escribiendo en los cuatro widgets de entrada, estos datos se almacenarán en alguna parte. No saben dónde, pero van a estar almacenados en algún lugar y podrán recuperarlos. Entonces eso significa que necesitas llamar a la función insert aquí en el script Bend. Entonces esta función obtendrá estos cuatro argumentos. Entonces el valor alrededor de los widgets de entrada, y los plantará en la mesa del libro. Tan fácil como eso. Entonces, lo primero que podríamos querer hacer es ir a la parte inferior de la entrada add. Así que aquí, y luego agregue una función envolvedora aquí. Al mando. Y luego creamos una función de comando Add. Y esto es bastante sencillo, en realidad. Simplemente dices back end dot insert y aquí pasas estos valores. Así que voy a copiar esto y pagar un poco aquí. Entonces probemos esto. Intentemos agregar algunas entradas. Digamos árboles y pasto. Digamos que ha sido arena, año 1917, y sólo hay que poner una O ahí para el ISBN y agregar entrada. Entonces la entrada probablemente se haya agregado en la base de datos, pero no vimos nada, y se puede ver con una función VL, probablemente. Entonces si presiono VL, veré árboles y pasto. Pero sería bueno que cuando agregamos entrada, esta entrada, se muestre aquí la nueva entrada para que el usuario sepa que la entrada se agregó con éxito a la base de datos. Entonces aquí están los árboles y la hierba. Y así sigamos adelante y hagamos algo que la entrada se muestre en el list box cuando el usuario presiona en la entrada. Y lo que podemos hacer es que primero tenemos que asegurarnos de que la lista esté vacía. Así que borra cero para terminar la lista. Eso nos da una lista vacía. Después insertamos nuevos valores al final de la lista. Entonces, ¿qué valores? Bueno, es una. Entonces los valores que ingresará el usuario, así como así. Entonces veamos cómo va esto. Digamos que ans pastizales. Digamos que Kirk cumplió el año 1910 y un número ahí. Y esto no es exactamente lo que esperábamos, en realidad. Y lo conseguimos porque estamos insertando aquí muchos valores efectivamente. Entonces le estamos diciendo a Python que inserte todo esto en un nuevo valor, esto en uno nuevo, y esto también, y así sucesivamente y así sucesivamente. Entonces la solución aquí es simple. Sólo ponlo como un solo valor. Así como un triple y ejecutar el programa de nuevo. Un error aquí, entonces necesitamos un soporte más porque este soporte aquí se cierra aquí. Así que así, pruébalo de nuevo. Digamos cálida y Elena Gómez, 1944, y un número aquí. Agregar entrada. Y ahora tenemos la fila en una sola línea. Combustible, y la lente Wonder está ahí. La lente de hierba también está ahí. Entonces, sigamos adelante. 172. Cómo conectar la interfaz de usuario con la interfaz de usuario, Parte 2 ++: Bien, tenemos un poco más de código para ir. Hemos definido los botones de vista, búsqueda y anuncio. Entonces ahora tenemos la actualización y el fondo cerrado. Y me gustaría continuar con el botón de borrar porque el botón de borrar es más fácil de implementar que el botón de actualización. Entonces déjame llamar de nuevo a la interfaz. Y nuevamente, piensa en el usuario. Lo que el usuario podría esperar es que tal quiera eliminar una de las filas, digamos, esta fila. Por lo que esperan seleccionar esta fila y luego presionan el botón eliminar seleccionado, y esta fila desaparecerá de la base de datos. Y también pueden querer cuando seleccionan una fila, también pueden querer ver los datos en estas entradas, y nosotros nos encargaremos de eso, también. Por lo que llenaremos estas entradas con los valores correspondientes cuando el usuario haga clic en una de las filas aquí. Todo bien. Eso tiene sentido, creo. Y ahora veamos la función delete en el script de backend Entonces, lo que hace Delete es que espera un ID, la idea de la fila, y luego esta instrucción SQL luego busca este ID y elimina toda la fila de la tabla libro donde la D es igual a esta dada D aquí Entonces, lo que tenemos que hacer es cuando el usuario selecciona una de las filas en el cuadro Lista, necesitamos tomar el ID de esa fila y luego enviar ese ID a la función delete del script back end. Y luego la función delete se encarga de la fila. Oh, bien. Y nuevamente, en este caso, también querrías agregar algún tipo de función de comando delete aquí, a la parte inferior de eliminar Pero en este caso, en realidad me gustaría hacer un enfoque de abajo hacia arriba. Entonces pensemos primero en cómo vamos a conseguir el rol seleccionado por el usuario. Entonces pensemos primero en eso. Y no sabes problema, pero hay un método llamado bind de la biblioteca Kinder, y bind se usa para enlazar una función a un evento widget Entonces déjame escribir ese método bind para que entiendas mejor las cosas. Así que estamos vinculando un método aquí al widget list box. Entonces tiene sentido escribir ese método después de haber definido la lista. Widget. Entonces definimos el widget de lista aquí, y lo configuramos y luego enumeramos un enlace. Y el método bond toma dos argumentos. Entonces toma tipo de evento, y también toma una función que desea vincular al tipo de evento. El tipo de evento aquí realmente va dentro de estos caracteres, y se llama List box select. Y luego se quiere especificar aquí una función que devuelva un objeto list con una selección. Entonces algo como esto. En realidad, esperaremos tupla en este caso, una tupla con el DNI, el título, el autor, y el año y el número ISBN Así que vamos a llamar a esa función, obtener seleccionado Fila. Entonces seguimos adelante y definimos esa función. Vamos a definirlo desde el principio aquí. Así que def obtener fila seleccionada. Y esta función ahora, debido a que tenemos vincularlo un evento a un evento widget, esta función obtiene un parámetro especial llamado event. Y el parámetro de evento contiene información sobre el tipo de evento. Entonces Python sabe que cuando pasas esto al método bind, espera que la función tenga este parámetro de evento. Y luego. Entonces nuevamente, esta función volverá a la tupla seleccionada Pero antes que nada, la forma que esto funciona es que primero necesitamos obtener el índice de la lista del list box. La lista puede tener, digamos, diez filas, y la primera fila tendrá un índice de cero, la segunda un índice de uno, y así sucesivamente, hasta nueve si tenemos diez filas. Entonces, para obtener el índice de la fila seleccionada del list box, nos referimos al list box y luego al método de selección cur del list box Todo bien. Y en realidad me gustaría simplemente hacer una devolución temporal del índice aquí para que veas qué es este objeto y cómo se ve. Entonces esperemos que esto funcione. Debería funcionar. Python. Front end, sí. Y así, en realidad, deberíamos haber impreso el índice aquí. Apenas lo estamos devolviendo, así que Imprimir índice. Vamos a probar esto otra vez. Entonces espero imprimir el índice aquí, sí. Entonces este es el índice de una fila seleccionada. Entonces esto es cero, uno, perdón cero dentro de cero, uno, dos, y así sucesivamente. No obstante, como ve, este no es un número sencillo. Esto es en realidad una tupla, una tupla con un solo elemento Entonces lo que tenemos que hacer es un truco muy sencillo, y simplemente agarramos el ítem con índice cero de la tupla, que es el número dos en este caso, cero en este caso, y así sucesivamente Y entonces podríamos intentar esto de nuevo, ver todos, y ahora obtenemos números únicos. Genial. Entonces estamos muy cerca, pero aún no ahí porque necesitamos obtener la tupla real con todos los valores de la fila Y para conseguirlo, es necesario aplicar otro método llamado get así que digamos la tupla seleccionada Entonces la tupla real que queremos, la fila real que queremos es igual a al menos una que obtenga índice Para que lo puedas leer así desde el menor cuadro, obtener la tupla con índice X. Y luego podemos probar esto. Entonces, ¿qué estamos consiguiendo aquí? No te confundas con esta fila. Esto se está imprimiendo porque en el guión de Ben, realidad tenemos una función de búsqueda que se está imprimiendo. Entonces esto es imprimir la salida de la función de búsqueda. Entonces esta función está diciendo dame la fila con John Smith como nombre de autor, y la próxima vez, esto no se ejecutará. Entonces atrás lo que queremos hacer es seleccionar una fila y conseguimos que la fila se imprima ahí fuera como una tupla Entonces eso es genial. Entonces, ¿qué sigue? Bueno, lo siguiente es que necesitamos pasar el ID de la tupla seleccionada a la función delete del script back end Vamos al botón seleccionado. Comando es igual al comando delete. Así es como voy a llamar al guión, y eso debería ir aquí. D comando delete. Y lo que tenemos aquí es backend dot delete. Nuevamente, el método delete obtiene como argumento el ID. Entonces tenemos una tupla llamada get selected row, así que necesitamos devolver la tupla seleccionada Entonces, si llamamos a la función ahora, obtenemos fila seleccionada fila seleccionada. Y necesitamos el ítem con índice cero de obtener fila seleccionada. Guarde el guión y obtuvimos un error en la línea 24. No tengo la columna aquí. Vuelve a intentarlo. Ver, y vamos a tratar de eliminar la luna. Eliminar. Y Python está diciendo que a get selected row le falta un argumento posicional requerido Ese es el argumento del evento. Y entonces Python tiene razón porque aquí tenemos un parámetro de evento, así que tenemos que pasar eso como argumento. Pero aquí estamos llamando a la función sin ningún argumento. Entonces estamos recibiendo un error. Por otro lado, no podemos eliminar este evento porque esta función también está siendo ejecutada por el método bind. Entonces en ese caso, el héroe del día aquí sería una variable global. Entonces ya sabrás que las variables locales, como la tupla seleccionada, es una variable local porque está definida dentro de una función Entonces, si imprimes esta tupla, Fuera de la función, selecciona la tupla Obtendrás un error porque Python dirá, Oh, lo siento, no reconozco esto. Este es un objeto indefinido porque las variables locales tienen sentido solo dentro de la función. Entonces en ese caso, podemos usar variables globales. Y la forma de crear una variable global es mediante el uso de la palabra clave global y luego declarar el nombre de la variable que se quiere crear Entonces en ese caso, si imprime la tupla seleccionada fuera de la función, obtiene el valor de la tupla seleccionada, y el valor de la tupla seleccionada en este caso sería la tupla con los valores de la fila Entonces, en ese caso, no necesitamos devolver la tupla seleccionada porque simplemente podemos apuntar a la variable de tupla seleccionada en ese caso, y necesitamos arreglar nuestra función retrasada aquí Entonces queremos tupla seleccionada y queremos el ítem con índice cero de la tupla seleccionada Entonces volvamos a ejecutar. Y ver todo y borremos la luna. Eliminar seleccionados. Ver todo y la luna se ha ido. Entonces parece estar funcionando. Ahora, me gustaría llenar las entradas con una tupla o fila seleccionada, si así lo desea Así que necesitamos usar la función insert del widget enter, y en realidad podríamos escribir esos métodos dentro de la función get selected row. Porque sabes cuando el usuario hace clic en una de las filas, cuando selecciona una de las filas, inmediatamente queremos llenar esas entradas con valores. Y el primero sería el final del título y queremos asegurarnos de que la entrada esté vacía. Así que borra cero para terminar. Eliminar todo de la entrada si hay algo. Y luego E uno, inserte. Entonces lo que queremos insertar en la entrada del autor. Bueno, esa sería la tupla seleccionada con índice de uno. Entonces el ID tiene un índice de cero. El tercer título tiene un índice de uno, y este sería el mismo para las demás entradas también. Entonces tenemos E uno, dos, E tres y E cuatro. Y entonces aquí queremos agarrar el nombre del autor. Aquí queremos la E y el número ISBN aquí. Genial. Entonces espero que esto funcione. Debería funcionar. Así que ver todo seleccione algo, y el método de inserción le falta un argumento requerido. Creo que se me olvidó poner donde quiero insertar los nuevos valores. Entonces necesitamos aquí, aquí, aquí y aquí. Entonces volvamos a ver, ver todos y ahora parece estar funcionando. Entonces árboles y pasto y curvas y así sucesivamente. Y permítanme tratar de eliminar esto, eliminar, y la entrada se ha ido. Genial. Entonces ahora sigamos adelante. Sin perder tiempo, sigamos adelante e implementemos la función de actualización. Así que volviendo a nuestro script de backend, la función de actualización obtiene un ID y un autor de título e ICBM Entonces, a diferencia de la función de eliminación que solo obtuvo un elemento, esta obtiene cuatro elementos, cinco elementos, en realidad. Entonces en la función de comando delete, pasamos la tupla seleccionada con un índice de cero Ahora, la función de actualización será similar estructura similar, pero luego tendremos múltiples argumentos aquí. Así que tenemos ID tile author e ISBN. Así seleccionó tupla con un índice de uno, seleccionada, tupla con índice de dos, seleccionada, tupla con índice de tres, y tupla seleccionada con un Y luego tenemos que agregar esa función a la parte inferior de actualización. Así que actualizar comando. Bien. Y se me olvidó cambiar esto. Comando de actualización. Esto debería funcionar. Entonces veamos. He olvidado pasar aquí el nombre del parámetro. Entonces comando equivale a actualizar comando, guardar y ejecutar de nuevo. Intentemos actualizar esta fila. Entonces digamos nueve. Se seleccionó una actualización de prensa. Y otro error más no te asustes por los errores. Cuantos más errores veas, más familiarizarás con Python. Es importante enfocarse en el error, ver qué línea está recibiendo el error y tratar entender el tipo de error y el mensaje que está recibiendo. Entonces en este caso, delete toma un argumento posicional, pero se dieron cinco Aquí no ejecutamos una función de eliminación. Ejecutamos el botón de actualización que obtiene una función de comando de actualización, y usted va al comando de actualización. Así que el comando de actualización B y eliminar. Entonces por eso estamos recibiendo este error. El comando update en realidad está ejecutando el método delete del script Bend así que queremos update en lugar de delete. Y guarda el script y vuelve a ejecutarlo. Ver todos. Realmente quiero actualizar este número aquí. Así que nueve actualizaciones seleccionadas, ver todas, y no está funcionando. Y en este caso, ni siquiera estamos recibiendo un error aquí, por lo que puede sentirse perdido en este momento. Entonces lo que podrías hacer en este caso es verificar lo que estás devolviendo en tu función de comando update. Entonces sabes que puedes aislar problemas mediante el uso de declaraciones impresas. Entonces digamos que quieres verificar lo que estás enviando a la función de actualización. Conozco el problema aquí, pero solo para mostrarte la forma en que puedes solucionar las cosas Así que imprime y ejecuta esto de nuevo. Todos obtenemos las actualizaciones de pastizales seleccionadas. Y ves que el tople se está imprimiendo tal como es. Entonces este número no está cambiando. En realidad, no lo cambié. Entonces déjame cambiar esto otra vez. Digamos 24 y actualización seleccionada. Y así se ve que el número 24 no se está imprimiendo aquí. Entonces eso significa que estamos enviando a la base de datos. Este registro, de nuevo, así que no estamos enviando el registro actualizado. Entonces, ¿por qué es eso? Si ya lo has encontrado desde antes cuando escribí esta función, eso es muy genial. Si no lo has hecho, bueno, la razón es que estamos enviando al método de actualización, la tupla seleccionada Y la tabla selectora es la que el usuario ha seleccionado. Entonces no son las entradas reales las que el usuario está enviando al comando update. Entonces en ese caso, en realidad queremos enviar estos valores, por lo que los valores actuales de las entradas. Entonces voy a copiar esto y pegarlo aquí. Bien. Y el primer tople seleccionado es el ID, por lo que queremos mantener la D de fila seleccionada porque el usuario está cambiando los otros valores, no el ID Y esto se ve bien. Aquí se cierra el soporte. Seguro. Así que borra este, seguro, vuelve a ejecutar. Vamos a esto y digamos tres, actualización seleccionada, V y tres está ahí. Eliminar, ver todo, se va. Puedes agregarlo nuevamente porque lo tienes en tus entradas, en la entrada, y se volvió a agregar, y puedes verlo aquí. Entonces todo está funcionando muy bien. Y queremos cerrar este programa, pero cerramos botón, no está funcionando en este momento, así que sigamos adelante e implementemos eso también. Y eso es muy sencillo. Sólo tienes que ir aquí y comandar Águila dos. Entonces quieres destruir la ventana, ¿verdad? Así que el punto de la ventana destruye. Eso es. Guarde el guión. Y pruébalo. Entonces están trabajando como de costumbre, cierran y la ventana se cierra. Y es posible que también desee poner un título a su ventana y usar el método WM title del objeto window Título. Digamos libro, tienda. Y deberías ver ese nombre en la barra de título. Entonces, finalmente, terminamos con este programa, y sé que podría haber cosas que mejorar, y voy a dar la bienvenida a cualquier sugerencia de ustedes para que podamos mejorar el programa. Los programas tienen versiones de esta es versión cero, se podría decir. Y espero que esto te haya resultado muy útil y hayas aprendido mucho de esto. Entonces te hablaré más tarde. 173. Creación de ejecutables .exe y .app desde el script Python: Hola otra vez. Entonces tenemos este gran programa que funciona muy bien. Y consta de tres expedientes. Así que dos archivos Python y un archivo DB punto, donde se almacenan los datos. Esto es bueno. Podemos ejecutar los scripts así. Entonces usando Python, y obtenemos el programa mostrado. Pero pienso en si quieres darle tu programa a otra persona , solo puedes decirle, Oh, instala Python y puedes ejecutar el programa yendo a la terminal e invocando Python y script Por lo que eso puede resultar terriblemente difícil para los usuarios que no tienen experiencia con la programación Entonces en ese caso, quieres hacer un programa ejecutable independiente que puedas enviar a cualquiera, y ellos simplemente pueden hacer doble clic en él y seguir adelante e insertar datos y recuperar datos y así sucesivamente. Entonces en esta conferencia, te voy a mostrar cómo hacer un archivo ejecutable, y tú haces ese archivo, ya sea que estés en un Mac o Windows o Linux. Entonces el código es el mismo. Existe una gran biblioteca para hacer ejecutables independientes Ese es el instalador de Pi. Entonces puedes instalar Pi Installer usando PIP Y ahora es terriblemente fácil hacer un archivo ejecutable independiente a partir de tu script Python Todo lo que tienes que hacer es llamar al instalador de Pi y luego apuntar a tu script. Entonces en este caso, nuestro guión principal es front y dot py. Entonces ese es un script que contiene todo el código, y también importa el script de back-end. Entonces queremos señalar ese archivo. Y si lo dejas así, obtendrás el archivo punto X si estás en Windows, archivo, si estás en una Mac Y junto con esos archivos, también obtendrás un montón de otros archivos que están asociados con tu programa. El beneficio de eso es que se vuelve más fácil solucionar cualquier error que pueda obtener Entonces tienes muchos archivos y luego puedes ir a esos archivos y encontrar el error y así sucesivamente. Pero si quieres ser práctico, querrías pasar un parámetro aquí. Llamado a un archivo. Así que eso creará un solo archivo ejecutable para ti. Y en este formulario, también obtendrá la línea de comandos de terminal se muestra en el fondo de su interfaz gráfica de usuario. Entonces, si no quieres eso, puedes especificar otro parámetro llamado windowed así y ejecutar Y tendrás que esperar un rato. Y mi ejecutable fue creado. Entonces, si estuvieras en una Mac, este sería un archivo. Entonces el mío está aquí en la carpeta de discos. Entonces en esta carpeta, puedo buscar aquí. Entonces front end punto x. Si ejecutas eso, obtienes la ventana. Y como ves, también obtuviste los libros que generó el archivo DB. Entonces, por defecto, esto solo crea un archivo ejecutable. Entonces cuando ejecutes el programa por primera vez, recuerda que teníamos una función connect en el script de backend Entonces esa función crea una base de datos. Entonces eso fue lo que hizo esto. Y si ves todo ahora, no tienes ninguna fila, así que no tienes ningún dato porque esto fue creado desde cero. Entonces, en caso de que quieras tener la base de datos existente, querrás darle a tu usuario tanto el archivo ejecutable la base de datos existente que tienes. Entonces, por ejemplo, digamos que esto no existe, y puedo ir a mi base de datos existente, y si la pongo aquí, entonces Python sabe dónde buscar la base de datos. Ahora si ves todo, obtendrás datos de la base de datos existente. Y podemos hacer una prueba rápida. Agreguemos un libro, el gran corto D Taylor año 1913 y pongamos un número ahí En la entrada, y la entrada se agrega a la base de datos. Y puedes cerrar el programa, y eso es todo. Espero que disfrutes esto. Te veré en la próxima conferencia. 174. Qué es la programación orientada a objetos (OOP): Hola, y bienvenidos a esta nueva sección donde aprendes sobre la programación orientada a objetos, a menudo referida como POO para abreviar Ahora bien, si tienes experiencia con la programación, probablemente ese sea un concepto familiar para ti porque OOP se usa en la mayoría de los lenguajes Pero supongo que no sabes nada de programación orientada a objetos, así que voy a explicar el concepto desde el principio. Ahora, hay varias definiciones de OP por ahí, y algunas se ponen muy complicadas. Pero creo que lo mejor que hay que conocer es que programación orientada a objetos es solo una forma de organizar tu código. Eso significa que la OOP no es imprescindible. Así que simplemente puedes usar funciones para construir una aplicación como hicimos aquí con nuestra aplicación de librería, y muchos programadores optan por no usar programación orientada a objetos para organizar su código, por lo que no usan la forma OOP para escribir su código, No obstante, generalmente se acepta que si se tienen más de dos funciones, cuales aplican operaciones al mismo objeto. Por ejemplo, un programa que aplica operaciones a una interfaz Kiner Entonces tienes estas funciones de devolución de llamada. Y así deberías organizar estas funciones en algo llamado clase. Ahora bien, debido a que la programación orientada a objetos es un concepto complejo, no lo incluí al inicio de este curso. Entonces quería que primero construyeras algunas aplicaciones usando funciones, lo cual es más intuitivo, luego te muevas a la programación orientada a objetos. Así que volvamos a nuestra aplicación de interfaz gráfica de usuario. Entonces el objeto aquí, estoy hablando de objetos, y el objeto aquí es toda la ventana con botones y otros widgets también. Ahora podemos poner todos los atributos que definen este objeto, así esta ventana, como el título de los botones, las etiquetas, y también las funciones de devolución adjuntas a este objeto dentro de una clase Entonces en nuestra aplicación, no usamos clases, usamos funciones. Entonces este script aquí no se aplica a la programación orientada a objetos, y poner este objeto dentro de una clase significa que estamos organizando el código en una clase, que crea un objeto, así que por eso lo llamamos programación orientada a objetos. Y usar clases para organizar tu código se conoce como programación orientada a objetos. Y lo que voy a hacer a continuación es en mi script de back end donde tengo las operaciones de la base de datos. Transformaré este guión poniendo esto dentro de una clase. Y después de eso, puedes hacer lo mismo para la interfaz front-end para que practiques la programación orientada a objetos. Ahora bien, mi propósito aquí no es entrenarte a escribir clases. Primero quiero que entiendas las clases, y muchos recursos de aprendizaje explican la programación orientada a objetos diciendo algo así como, creamos una clase que crea un objeto perro, y un perro puede calentar y ladrar y así sucesivamente. Ese es un buen ejemplo para entrenar para aprender la sintaxis de una clase. Pero bueno, ¿qué es un perro en la programación? O sea, puedes rascarte la cabeza todo el día tratando de llegar a un escenario en el que tuvieras un perro como objeto en tu aplicación. Ese sigue siendo un buen ejemplo, pero solo si tienes algunos años de experiencia en programación, y puedes pensar rápidamente en dónde y cuándo usar clases basadas en tales ejemplos. Asumo que no tienes estos años de experiencia, así que usaré objetos de programación reales en esta sección para explicar un concepto tan complicado como la programación orientada a objetos. Entonces, la mejor manera de entender OP es primero construir un programa con un enfoque de programación orientado a objetos conocido , así usando funciones, y una vez que conoces bien ese programa, luego construyes ese programa nuevamente, usando OP, y luego automáticamente entiendes qué es OP al observar cómo son las cosas diferentes. Así que permítanme organizar este código usando clases ahora y después construiremos un programa más simple desde cero, donde creamos un objeto de cuenta bancaria con Python, y aplicaremos funciones a ese objeto como retirar depósito, y así sucesivamente. Oh, eso es genial. Y, sí, eso es sobre esta introducción. Y pasemos a la siguiente conferencia y escribamos algunas clases. 175. Uso de POO en un programa, parte 1: Bueno. Ahora voy a seguir adelante y transformar este script en un estilo de programación orientado a objetos. Entonces, en otras palabras, voy a organizar estas funciones de una manera más eficiente. Y solo para refrescar tu memoria, lo que hace este script, así tenemos un script de back end y front end, y el front end, lo que hace es que construye la interfaz gráfica de usuario, así que ya lo sabes. Y tenemos estos libros archivo de base de datos DB, y ahí hay algunos datos. Y puede buscar entradas para filas en la base de datos en Nuevo y así sucesivamente. Y este punto pi de front-end construye la interfaz gráfica de usuario, y este back-end es responsable de la interacción de la base de datos. Y así la programación orientada a objetos se trata de encapsular funciones dentro una clase así clase y llamemos a esta base Y si, eso es, básicamente. Todavía tenemos muchas cosas por hacer, pero pensemos en qué es esta clase de base de datos. Bueno, siempre que decidas usar programación orientada a objetos, primero necesitas pensar el objeto que quieres usar, que es el objeto al que quieres aplicar estos métodos. Y en nuestro caso, esa sería la base de datos. Y así entonces insertamos datos a las tablas de esta base de datos y vemos datos y así sucesivamente. De este objeto, este objeto, primero necesitas crear un objeto mínimo cuando llamas a la clase. Y te voy a mostrar cómo llamas a una clase en un minuto. Pero por ahora, centrémonos en crear el plano del objeto Entonces creas el blueprint del objeto, que es este de aquí, y luego creas instancias de objeto usando ese blueprint, y lo haces llamando a la clase Ahora, cuando llamas a la clase, quieres tener este objeto mínimo. Entonces en este caso, eso sería para establecer una conexión con esta base de datos. Y luego crea un objeto cursor y tal vez busca tabla para que te asegures que tu base de datos tenga una tabla para que posteriormente te permita aplicar métodos a esta tabla de base de datos. De lo contrario, la base de datos sería inútil. Por lo que necesita tener una mesa y una conexión establecida. Eso significa que tienes que encontrar una manera de que cuando llamas a la clase, estas líneas aquí se ejecuten. Y Python ha reservado una sintaxis especial para eso. Entonces la primera función de tu guión necesitas llamarlo con doble guión bajo delante y en la parte posterior Entonces esa es una función init, que significa inicializar un objeto En otros lenguajes de programación, eso se llama constructor, por lo que construye el objeto. Entonces cuando llamas a una clase, esta función se ejecuta, pero no las otras. Los unos se ejecutan si te refieres a ellos, en este caso, eso sería algo así como database dot insert, y luego pasas los parámetros, los argumentos ahí. Ahora tenemos bastantes cosas que agregar aquí en el guión para que esto funcione. Pero preferiría hacerlo en base a prueba y error. Nosotros lo ejecutamos veremos qué error obtenemos para que entiendas cómo están funcionando las cosas ahí. Lo que voy a hacer, voy a llamar a esta clase como es ahora. Entonces no necesitamos esta función. Esta función se ha ido ahora porque la sustituyo por ella. Entonces ya no llamas a funciones como lo hicimos aquí. Entonces, por ejemplo, aquí estamos llamando a funciones desde el módulo backend, que es como un módulo, estás importando esto como un módulo Y en este caso, lo que hacemos es desde backend, importar base Así que importamos la clase de base de datos del script Becan. Así que eso pone a disposición la clase de base de datos para nosotros. Entonces el plano de la base de datos. Entonces esto es solo un plano. Ahora necesitamos crear un objeto a partir de este plano. Entonces llamemos a esa base de datos de objetos. Eso es igual a la base de datos. Entonces la clase y por ahora, no pasemos ningún argumento ahí. Entonces necesitamos reemplazar estas referencias para que ya no hagamos backend. Hacemos base de datos esa vista. Entonces nos estamos refiriendo a la función view del objeto database, que es una instancia de esta clase. Genial. Entonces seguiré adelante y reemplazaré estos otros con base de datos. Así que atrás y reemplace eso, reemplace, reemplace. Sí, eso es. Este es el nombre del guión, y debería ser así. Escápate aquí. Genial. Ahora voy a seguir adelante y ejecutar eso. Así que no esperes que esto funcione, pero tenemos que mirar de cerca al error, tratando de entender lo que dice. Así que rastrear archivo fronten punto pi Línea cuatro. Aquí. Se necesitan cero argumentos posicionales, pero se dio uno. Y lo que está sucediendo aquí ahora es que cuando llamas a la clase, esta clase creará una instancia de objeto y la almacenará en esta variable. Y luego envía esta instancia de objeto a esta función. Así que déjame dividir esto a la derecha para que tengamos los dos guiones aquí. Entonces la parte delantera y la parte posterior. Así que básicamente, esta instancia de objeto de base de datos se está enviando a este objeto innit A pesar de que se trata de un soporte vacío. Entonces eso es como una sintaxis oculta ahí. Y para arreglar esto, necesitas realizar un truco aquí. Entonces dice que toma cero argumentos posicionales porque en realidad tiene un corchete vacío aquí Entonces es como una función normal y funciones si no pones un parámetro ahí, pero luego pasas un parámetro cuando lo llamas. La función dirá, no tomo ningún argumento posicional ni ningún argumento obligatorio Pero se me dio un argumento, así que voy a lanzar un error. Ahora para arreglarlo, necesitas pasar un parámetro ahí. Y ahí todo el mundo pasa a sí mismo. Para que puedas pasar cualquier palabra que siga funcionando. Pero como convención para que tu código sea legible por otras personas, necesitas pasarte por ti mismo. Entonces ahora tu función init toma un parámetro, y cuando llamas a esta clase, esta clase enviará la instancia de objeto, y esa instancia de objeto irá dentro de este parámetro Entonces este parámetro será reemplazado por el argumento de instancia de objeto. Genial. Si aún no entiendes eso, estoy seguro que lo harás más tarde a medida que escribas más clases. Bueno. Ahora, seguiré adelante y guardaré esto y esto y volveré a probar el guión. Y genial. Entonces eso significa que la clase se inicializó con éxito, y creó una instancia de objeto para nosotros. Ahora, déjame cerrar esto y quizá añadir algo ahí. Esto no es necesario, sino solo para mostrarte que si quieres agregar más parámetros a tu función init, haces algo como DB y luego reemplazas esto con Dib y luego aquí pasas el argumento que se pasará a este parámetro DB Entonces eso sería libros punto dB la ruta del archivo a nuestra base de datos. Genial. Y si vuelves a ejecutar esto, obtienes el mismo resultado. Entonces, lo que está sucediendo aquí es que Python es para enviar la instancia de objeto de base de datos al parámetro self, y luego envía la ruta del archivo al parámetro DB, y esos parámetros DB envían esa ruta al parámetro DB del método connect. Genial. Ahora veamos cómo funcionarán estos métodos. Entonces tenemos el botón view, que si lo presionamos, lo que va a pasar es la función view de la clase database, en realidad, se ejecutará el método view de la clase database. Entonces este de aquí, veamos si somos capaces de conseguirlo. Bueno, arn error, déjame cerrar esto. Entonces dice ver t cero argumentos posicionales, pero se dio uno Entonces eso nuevamente sugiere que cuando llamas a un método de clase, la clase también está enviando la instancia de objeto a ese método, tal como lo hizo con la función init Eso significa que tenemos que volver a hacer el truco. Pasa el ahí e inténtalo de nuevo, mira qué error obtenemos esta vez. Bueno, no hay error. Las cosas están funcionando, obviamente. Entonces eso es genial. Sin embargo, si intentas los otros métodos ahora como insert, probablemente obtendrás un error. Entonces déjame probar eso. Entonces si todos ustedes, está funcionando bien, pero si insertamos algo, digamos hola ahí y y sí, en la entrada. Entonces insert toma cuatro argumentos posicionales, pero se dieron cinco. Entonces inserte. Y estos valores se están pasando a estos parámetros, pero también estamos pasando la instancia del objeto. Así que vamos a seguir adelante ahí mismo, y yo haré lo mismo para la búsqueda también. Eliminar y actualizar. Sí, eso es lo que tenemos. Se ve bien. Vamos a intentarlo de nuevo. Así que ver todo y Agregar entrada. Sí, esto parece que está funcionando. Ver todas y aquí tenemos ya sea Cerrar. Así que pudimos crear una clase y poner todas las funciones dentro de la clase. Entonces tenemos un programa organizado ahora. Y así es la programación orientada a objetos, sino la programación orientada a objetos no se trata simplemente de poner algunas funciones dentro de la clase. La programación orientada a objetos se trata de un buen diseño. Así que este script no es probablemente el mejor diseño que se nos ocurra por qué es eso porque no estamos haciendo uso de las ventajas reales que tenemos al usar clases. Entonces lo que quiero decir es que aquí estamos creando estos métodos, y en cada método, estamos ejecutando algunas funciones cercanas y también creando una conexión en cada uno de los métodos. Entonces podemos reducir este código además eliminando las acciones repetidas. Entonces en una clase, lo que hay que pensar es una forma de construir algo al principio, en la función init Y luego te refieres a ese algo en las otras funciones en los otros métodos. Entonces estamos hablando de métodos aquí. Entonces, aunque nuestro guión esté funcionando bien, en la próxima conferencia, seguiremos adelante y mejoraremos el diseño del mismo. Entonces te veré ahí. 176. Uso de POO en un programa: Bueno. Pudimos transformar nuestro script, que fue construido usando funciones, y creamos una clase y colocamos esas funciones dentro de esa clase. Entonces ahora se les llama métodos. Y si bien esto es un uso de una clase, todavía no es el mejor uso del paradigma de programación orientada a objetos. Porque aquí tenemos una base de datos, un objeto de base de datos que se está creando, pero no lo estamos tratando como un objeto sólido, así que lo estamos abriendo y cerrando en cada método. Entonces lo que estoy pensando es que creamos una conexión cuando llamamos a la clase. Entonces cuando se ejecuta esta función, creamos una conexión ahí y mantenemos esa conexión abierta. Entonces no incluyo ahí este método close, pero dejo el método commit en caso de que no haya tabla, y se creará una tabla, y los cambios se comprometerán a la conexión abierta. Ahora, porque ahí tenemos una conexión abierta, no necesitamos establecer una nueva en cada método. Y ni siquiera necesitamos crear un objeto cursor porque aquí se está creando el objeto cursor. Entonces nos deshacemos de esas dos líneas en cada uno de los métodos. Entonces a la vista, tenemos un objeto cursor cuando vamos aquí, y luego ejecutamos esta declaración a ese objeto cursor. Entonces eso es bueno. Entonces bajamos aquí, estos dos también. Y para el método delete. Una actualización también. Genial. Ahora, veamos cómo va esto. Déjame hacer esto más cerca. Entonces llamamos al script front-end donde estamos creando una instancia de nuestro objeto. Hasta el momento tan bueno. Ver todos. Y dice que una curva de nombre no está definida en la línea 17. Entonces ejecutamos el método view. Y lo que hace el método view es que intenta encontrar una variable declarada variable dentro de la función. La variable curva, no la encuentra, entonces mira si hay una variable fuera de la función y no la encuentra. En realidad, hay una variable que ha sido declarada en esta función init, pero esta es una variable local Esto tiene valor sólo dentro de esta función. No se puede acceder a esto fuera de la función init. Pero si nos referimos al argumento propio, que es el objeto de base y vemos lo que obtenemos. Déjame cerrar esto. Guarda eso funciona y mira todo, y ahora obtenemos otro tipo de error. Y dice error de atributo. Entonces déjame cerrar esto. Así que mira cuidadosamente aquí y dice que objeto de base de datos no tiene curva de atributos. Eso está en la línea 17, entonces esta de aquí. El objeto de base de datos, este es este de aquí. Así que self ha sido reemplazado por base de datos, que es el objeto creado por esta clase. Este es un atributo de este objeto. Y para arreglarlo, necesitamos crear un atributo ahí. Entonces decimos auto punto cursor punto cur, Eagles conexión punto Entonces el método cursor del objeto de conexión de la biblioteca QSt tres Ahora bien, si intentamos de nuevo el código, dice que la curva de nombre no está definida en la línea ocho. Ahora que creamos un atributo. Esto es tratar de encontrar la curva variable, la curva variable local, que no está en esta función porque ahora este es un atributo de la clase. Eso significa que tenemos que referirnos a uno mismo aquí también, al objeto y luego ejecutar la curva y así sucesivamente. Entonces si intentamos esto ahora, obtenemos otra curva de línea que no está definida en la línea 18. Entonces aquí, eso significa que hay que hacer lo mismo y ya no tenemos ninguna variable de curva. Tenemos el atributo cur. Entonces ahora si vuelvo a ejecutar esto, probablemente obtendré un error sobre la conexión esta vez, la variable con. Todos nosotros no se define en la línea 19. Así que de nuevo, esta función de vista está tratando de encontrar la variable con connection, así que auto commit allí y aquí también. Entonces declaras el atributo ahí y ahí cometes los cambios aquí abajo. Y auto conexión cerca. Entonces eso se ve bien ahora. Una rosa equivale a esto. Entonces rose es solo una variable local que se crea aquí, y luego devolvemos la rosa recuperada de esta expresión Entonces este método devuelve esto cuando está siendo llamado en este script, justo aquí. Bueno. Y si, déjame probar lo que tenemos en este momento. Mm línea siete nombre C no está definido. Oh, sí, tenemos que hacer lo mismo con estos dos, y ahora todo se ve bien. Así que intentemos de nuevo. Sí, ver todos, y ahora conseguimos los datos ahí. Pero cuando lo presiono por segunda vez, obtenemos otro error más. Y así dice que no puede operar en una base de datos cerrada. Entonces, ¿por qué es eso? Bueno, presioné el botón de vista una vez, y se ejecutó este método. Entonces el objeto cursor fue capaz de recuperar estos datos, y luego cerramos la conexión Yo devolví las filas. Así que pudimos conseguir esas tres filas ahí. Pero luego, cuando presiono el botón de vista por segunda vez, el método de vista se enfrenta a la conexión cerrada. Entonces es por eso que obtienes esto no puede operar en un error de base de datos cerrada. Entonces y mira lo que obtenemos. Así que ver todo, está funcionando bien. Eso significa que podemos seguir adelante y modificar los otros métodos. Así auto cursor y auto conexión y quitar el cierre. Pensemos en cerrar la conexión más adelante. Así que no te concentres en eso ahora. Solo trata de hacer que estos métodos funcionen, yo aquí, yo allá, y allá. Nuevamente, para el método Dalit, y eliminar la conexión cerrar Y todo debería funcionar bien en este punto. Entonces veamos si todo esto está funcionando. Busquemos algo. Veamos y busquemos entrada. Oh, ahí tenemos un cursor. Por lo que curr no está definido en la búsqueda. Oh, sí. Lo siento. Bien, de nuevo, todos vamos a ver entrada de búsqueda. Y otro error de nombre más. El nombre rosa no está definido. Entonces, por error, convertí esta variable local en un atributo. Entonces se levantó aquí, se levantó ahí. Bien, una vez más. Todos nosotros y ahora parece estar funcionando. Entonces agreguemos algunos datos. Agregue entrada allí y no pueda operar en una base de datos cerrada. Oh, ¿por qué? Mm. Porque en el método de búsqueda, tenemos una base de datos cerrada, por lo que cerramos la base de datos ahí. Y eso lo pasé por alto, así que no tenemos más métodos cerrados ahí, no Entonces intentemos una vez más, entonces. Perdón por eso. Agrega entrada, y ahora parece estar funcionando bien. Genial. Entonces todo se ve bien, excepto que ya no tenemos el método cerrado porque no podemos mantener ese método en los métodos de nuestra clase porque lo viste cuando tenemos ese método ahí y terminamos con este error. O puedes dejar el código sin método cerrado. Pero terminarías con algunos problemas después porque si tienes algunos métodos que no se han comprometido, entonces cuando otro programa se conecte a tu base de datos, entonces estos datos serán comprometidos. Con la siguiente operación. Así que a veces estropea algunas cosas Entonces, por regla general, debes cerrar la conexión. Y para ello, hay otro método especial que puedes agregar a tu clase como este de aquí, pero este otro es para destruir tu objeto Eso se llama trato. Entonces para delete, y esto también obtiene la instancia del objeto como parámetro. Entonces se aplica este método, se ejecuta cuando se llama a una instancia de la clase como lo estamos haciendo en el script front-end justo aquí, mientras que este de aquí, esto se ejecuta cuando esta instancia se elimina del script, que pasa a ser cuando se sale del script Entonces, antes de que salga el script, se ejecutará este método. Y lo que queremos hacer aquí es auto punto de conexión punto Cerrar. Entonces eso debería hacer el truco. Ahora bien, si probamos esto, deberíamos obtener los mismos resultados. Entonces agregué esto por error, pero de todas formas, así veremos que puedes buscar eso y obtienes la rosa con ese valor particular. Entonces esta es mi solución, y no hay una forma estándar de escribir un guión. Por lo que puede haber otras alternativas para resolver este problema para construir esta aplicación. Por lo que también puede optar por agregar un método allí o aquí en la interfaz gráfica de usuario. Entonces podrías hacer algo como agregar un botón, como el botón Commit, y luego aquí agregas otro método llamado Commit. Y luego eliminas probablemente todos estos métodos de commit de estos métodos de los métodos de tus operaciones escult Y luego pones ese método. Entonces un método commit dentro ese método commit de tu clase. Entonces, cuando la prensa del usuario está comprometida, entonces usted compromete los cambios a la base de datos. Entonces esa sería otra solución, pero esto es lo que se nos ocurrió en este caso en particular. Entonces espero que entiendas algunas cosas ahora, y esto rara vez se usa. Entonces normalmente solo hay que usar en ella y luego los otros métodos. Pero esto es apropiado cuando se quiere aplicar algo justo antes de salir del programa. Entonces eso es genial. Y en la próxima conferencia, escribiré otra clase. Entonces pensaremos en cómo modelar un problema, que consiste en crear algún tipo de objeto de cuenta bancaria donde restablecemos un saldo de dinero. Y luego retiramos y depositamos dinero en este saldo. Ahora, como ejercicio, se puede convertir este script, vendido skiner parte del programa, el front-end en una forma orientada a objetos Entonces pones esto dentro una clase y tratas de llegar a una buena solución. También te proporcionaré una solución a esto. Pero antes de eso, me gustaría que te pruebes tú mismo para que practiques un poco la programación orientada a objetos. Sí, eso es bueno con eso. Te veré en la próxima conferencia. 177. Crear una página de inicio de sesión del usuario: Hola. En esta conferencia, te voy a mostrar cómo crear una aplicación móvil minimalista usando Python y su biblioteca Kivi Lo que vamos a crear es esta app de una página que ves aquí. Como te mostré en el video anterior, esta app es en realidad una app multipantalla. Entonces, cuando haces clic en Iniciar sesión, vas a otra pantalla y luego registras en otra pantalla y así sucesivamente. Pero en esta conferencia, solo voy a mostrarte la app minimal, y eso es como una plantilla que puedes usar para escribir cualquier otra app, no importa si tienen una sola pantalla o varias pantallas. Entonces voy a mantener esta captura de pantalla aquí en la pantalla. Porque esto es necesario cuando creas la interfaz, la interfaz gráfica para que codifiques mirando tu diseño. Esto también podría ser en una hoja de papel donde hayas dibujado un boceto de cómo se ve la interfaz. Entonces lo que necesitas es un archivo Python. Así empieza todo. Y voy a nombrar mi archivo main dot pi. No tienes que llamarlo punto pi principal, pero es una buena práctica porque más adelante cuando implementemos nuestra app, cuando conviertas tu app una app móvil ejecutable que se ejecute en un teléfono móvil real, vas a tener que nombrar tu archivo main dot pi. Entonces es una buena idea nombrarlo ahora mismo, no tengas que cambiarle el nombre más tarde, o tal vez te olvides después y te den algunos errores. Entonces punto principal pi. Este punto pi principal es donde la lógica del programa se escribirá en lenguaje Python. Y también hay otro archivo que necesitas crear. Puedes nombrarlo como quieras, pero voy a llamarlo diseño KV. Entonces hay que usar la extensión KV y separar la pantalla. Voy a poner esto aquí. Mía ese pastel de aquí, y también voy a mostrarte esta foto aquí abajo para guardarla ahí. Y significa que ese pastel debería quedarse aquí. Todo bien. Entonces, ¿qué es este KV? Bueno, nada de qué preocuparse. En realidad es algo bueno. Hay dos formas de crear una aplicación móvil con Python y la biblioteca Kivi La primera forma es escribir todo en Python, que significa la lógica del programa. Entonces el procesamiento y todo lo que sucede en segundo plano con los datos procesas son los inicios de sesión de usuario, la recuperación de datos de observación meteorológica o donde quiera que lo haga tu app Y la otra parte del programa es la interfaz gráfica de usuario, que es esta cosa de aquí. Entonces, algún tipo de lenguaje, necesitas algún tipo de lenguaje para decir, Oh, una etiqueta con este tamaño de fuente y esta familia de fuentes y este libro de texto y así sucesivamente Y eso se puede hacer en Python, pero esa no es una buena práctica. Es una buena idea escribir esa interfaz gráfica en archivo punto KV en el idioma Kiwi. Pero el idioma kiwi es muy, muy sencillo. Lo vas a aprender en un día. Entonces no voy a mostrarte cómo hacer las dos formas. Entonces no te voy a mostrar cómo hacer una app usando ambos métodos, que significa el método de tener todo en el archivo dot py y el método de tener la lógica en el archivo dot py y la interfaz gráfica en el archivo KV, solo voy a mostrarte la manera correcta, que es usar Python para la lógica y KV para los gráficos. Eso es lo que usa todo profesional. Entonces, por favor aprenda de esta manera. Y partimos del archivo Python. El primer paso es importar todos los objetos necesarios de KV. Desde la app qv dot App Import. Este es el objeto principal. Simboliza la app de KV Lang Import. Si te preguntabas cómo conectas el archivo Python con el archivo KV, la respuesta es este objeto Builder, que te voy a mostrar en tan solo un minuto después de importar un objeto más de qv dot UIX screen manager, Import, screen manager, y Y eso es todo. Y luego usas el constructor ese método de archivo de carga, y ahí se carga el diseño ese archivo KV. Entonces así sabrá este script sobre el archivo KV. Asegúrese de que estos dos archivos estén en el mismo directorio, punto pi principal diseño punto KV. Y luego vas a tu archivo KV. La forma en que funciona el lenguaje KV es a nivel jerárquico. Entonces es una jerarquía de objetos. Entonces esta es una pantalla y esta pantalla tiene widgets en su interior. Entonces, si solo tienes una pantalla, vas a escribir. Simplemente dale un nombre a la pantalla y usa estos símbolos, y luego una columna ahí. Entonces estoy llamando a esta pantalla la pantalla de inicio de sesión. Y entonces si tienes otra pantalla, digamos, al hacer clic en este botón, aparece la pantalla de registro. Entonces quieres escribir otra pantalla como pantalla de registro. De la misma manera. Pero por ahora, sólo vamos a tener una pantalla. Y si te lo estás preguntando, ¿cómo obtuve este color púrpura, bonito? Bueno, esto es resaltado de sintaxis para el lenguaje Kiwi, y puedes usar una extensión, la extensión Kiwi. Así que solo busca Kiwi y usa esta extensión. Así que instálelo y luego habilitarlo. Y vas a obtener resaltado de sintaxis en el código de Visual Studio, lo cual es algo bueno. Entonces la pantalla de inicio de sesión tiene widgets, dije. Y una vez que presionas Enter, quieres sangrar con una tabulación o cuatro espacios, igual que en Python Entonces el primer widget es así que el primer widget es una etiqueta. Pero en lugar de hacer eso, quieres agregar otro widget encima de la etiqueta. Es un widget invisible, pero sigue siendo un widget. Es un diseño de cuadrícula. Ya no usas estos símbolos. Simplemente lo usas para la pantalla. Un diseño de cuadrícula, lo que es básicamente es el tipo de área, que tendrá todos los demás widgets. Entonces aquí abajo, vamos a agregar los otros widgets, y es una manera de separar el área. Entonces la pantalla. Y la forma en que creo que estoy pensando en separar mi pantalla de organizar mi pantalla es teniendo un diseño de cuadrícula principal que tendrá todo, y luego este diseño de cuadrícula contendrá otros dos diseños de cuadrícula. Disposición de cuadrícula para esta área aquí. Y este diseño de cuadrícula particular va a tener una columna y un número indefinido de filas. Así puedes agregar tantas filas como puedas en este diseño de cuadrícula. Entonces lo que quiero decir es el diseño de la cuadrícula, y luego otra cuadrícula. Disposición. Entonces, el primer diseño de cuadrícula es esta cuadrícula completa, que tendrá una sola columna. Y este diseño de cuadrícula está hecho de dos diseños de cuadrícula. Esta de aquí, y esta de aquí. Entonces éste es y eso es todo. La razón por la que lo volé de esta manera es porque esta área aquí tiene widgets que están organizados de la misma manera, lo que significa que aquí solo tenemos una columna Y aquí tenemos dos columnas. Entonces en este segundo diseño de cuadrícula, voy a declarar culto dos, el atributo. Y aquí, por defecto, estos diseños de cuadrícula, solo tienen una columna. Entonces lo voy a dejar como una columna. Y entonces lo que agregas aquí está etiquetado. Ese es el primer widget que tenemos aquí. Entrar y luego tabular, para que todo quede sangría El texto de la etiqueta está entre comillas, inicio de sesión de usuario. Entonces lo que tenemos debajo de la etiqueta es una entrada de texto. El texto de la entrada de texto. Eso no es lo que queremos aquí. Lo que queremos aquí es texto de pista. Entonces ese es el nombre de usuario que ves dentro del libro de texto es como una pista para el usuario Nombre de usuario. Y así aquí estamos agregando widgets como filas para ese diseño de cuadrícula. Entonces tenemos otra entrada de texto con texto de sugerencia. Contraseña. Y luego tenemos un botón con login de texto. Y luego vamos al otro diseño de cuadrícula. Aquí tenemos dos botones. Con el primero tiene un texto olvidé la contraseña, y el otro tiene un texto, regístrate, y eso es todo. Y eso es todo lo que tienes que hacer por ahora para la pantalla de inicio de sesión. Ahora, también hay algo más aquí que tienes que hacer. Así que ve al primer nivel de sangría, lo mismo que la pantalla de inicio de sesión . Usted ve aquí. Justo ahí, y quieres agregar otra regla. Entonces en el idioma kiwi, estas cosas aquí, en los símbolos dentro de estos símbolos son reglas. Esta otra regla es el Widget raíz. Entonces es básicamente un widget invisible que mantiene un registro de todas las pantallas de la app. Y en este caso, solo tenemos pantalla de inicio de sesión. Y esta pantalla de inicio de sesión tiene que tener un nombre. Entonces digamos pantalla de inicio de sesión entre comillas. Vas a ver más adelante que vamos a necesitar este nombre cuando nos referimos a la pantalla de inicio de sesión desde dentro del archivo Python porque la lógica se escribirá en Python, donde dices que si el usuario presiona ese botón, vamos a decir algo así como pantalla que actual igual a pantalla de inicio de sesión. Entonces vamos a dar el nombre de la pantalla que Python va a mostrar cuando el usuario presione ese botón. Y eso es todo lo que tenemos que hacer en el expediente KV. Asegúrese de que no está utilizando operadores de asignación en lugar de columnas. Así que usa columnas. Solía cometer este error cuando estaba aprendiendo lenguaje QV porque estás acostumbrado a Python donde usas mucho los operadores de asignación, echa un vistazo a tu archivo y luego vas a Python Y lo que tenemos que hacer ahora en Python, necesitamos crear algunas clases vacías que tengan el mismo nombre que estas reglas de aquí. Lo que significa clase. La pantalla de inicio de sesión usa el mismo caso. Entonces yo uso L y S aquí, igual que aquí. Entonces tiene que ser la misma cadena, exactamente. Y esta cadena tiene que heredar del objeto screen. Entonces va a ser un objeto de pantalla. Por ahora, digamos que acaba de pasar. Y luego hay que crear otra clase, que es, lo adivinaste, el widget raíz Cada regla aquí tiene que ser representada por una clase dentro de Python. El widget raíz tiene que heredar del administrador de pantalla. Así que no te preocupes si este código es un poco rígido por ahora. Entonces tienes algunas reglas que parecen una caja negra. Pero piensa en ello como solo una plantilla. Vas a usar esta plantilla para cada app, así que es bueno tener así que pasar por eso, también. Y por último, esto es lo último, lo prometo. También necesitas la app principal de la clase. Entonces se trata del objeto app que aún no hemos usado. Entonces esto tiene que heredar de la app. Ese es uno y esto necesita un método llamado build. Auto. Así que cada método necesita un parámetro propio. Entonces este método de compilación es en realidad un método de aplicación. Puedes ver eso si lo usas aquí. Entonces ejecuté esa línea y querida app. Verás construido está entre esos objetos, esos métodos ahí, construir. Bien. Y así ese método construido va a devolver el widget raíz. Pero asegúrate de que ese es el objeto y no la clase. Entonces estamos inicializando el widget raíz aquí. Se puede ver que estoy usando los corchetes redondos. Y lo último es, si y una vez que lo hayamos hecho, esta es la aplicación ahora. Estamos listos para ejecutar. Pero como ves aquí en el archivo Python, no estamos llamando a ninguna clase. Entonces, lo último que tenemos que hacer es, por supuesto, llamar a la clase principal de aplicaciones. Una buena práctica a hacer es usar si nombre es igual a dos. Principal. Luego creas una instancia de la app principal y luego usas el método run de la app main, que es, por cierto, es un método de app. Así se puede ver una carrera también aquí, justo ahí. Guarde ese script, y voy a ejecutar ahora el archivo y ver qué obtenemos. Espero, claro, conseguir algunos errores porque no creo que lo hice todo al 100%. Sí, no recibí un error. Todo está bien en la terminal, pero la interfaz no se ve como esperaba. Entonces he cometido algunos errores ahí. Así que a veces no se obtiene un error en el terminal, que hace que sea más difícil solucionar el problema Y si no obtienes un error, donde debería buscar es el código en tu archivo Q. Entonces, en este caso particular, parece que el diseño de la cuadrícula no está funcionando como se supone que debe ser. Y la razón de eso es que no especificé cuántas columnas debería tener el diseño de cuadrícula, el diseño de cuadrícula principal, sino también el otro, el hijo de ese diseño de cuadrícula padre. Entonces, antes de hacer un cambio, es necesario cerrar esta ventana. Voy a ir aquí. Entonces voy a pasar un atributo de culto tal como lo hice con este diseño de cuadrícula. Así que permítanme probarlo primero con ese diseño de cuadrícula padre. Entonces esto es lo que obtenemos. Como puede ver, en comparación con esto, no estamos viendo los primeros elementos de diseño de cuadrícula, que es una etiqueta, el nombre de usuario, contraseña, y la parte inferior. Debido a que estos widgets en realidad están ocultos dentro de esta parte inferior de contraseña olvidada. Entonces están en algún lugar de aquí. En la esquina. Entonces, cuando no especificas estas columnas, cuántas columnas tienes, Kiwi simplemente pegará todos los widgets en la esquina inferior izquierda. Entonces si cerramos esto ahora y también agregamos un atributo calls igual a uno, y si no lo guardo y vuelvo a ejecutar esto, veré la misma salida. Entonces necesito guardar el script, Control S, y luego ejecutarlo de nuevo. Y esta vez vemos lo que esperábamos más o menos. Bueno, todavía necesitamos agregar algo de relleno y algo de espaciado entre los widgets para que se vea como aquí. Pero esto es lo que conseguimos hasta ahora, y creo que es bueno. Entonces voy a cerrar esto ahora y considerar este código como hecho. Pero antes de cerrar el video, me aseguraré de que entiendas lo que está pasando aquí. Entonces este archivo Kiv, todas estas cosas que ves aquí, diseño de cuadrícula, pantalla de inicio de sesión, botón de entrada de texto, estos son en realidad objetos Python Algunos de ellos, como la pantalla de inicio de sesión y los widgets raíz son objetos representados por clases que creamos en el archivo Python, pantalla de inicio de sesión y el widget raíz. Las otras son clases que importas de Kiv. Entonces, si fuéramos a codificar solo en Python, no en lenguaje Kiv, tendríamos que hacer algo como desde Kv tendríamos que hacer algo como desde punto UixGridayOut Entonces esa es la misma clase que esta de aquí. Pero el archivo KV importará estos objetos implícitamente. Por lo que los importará ya sea desde tu archivo Python, como la pantalla de inicio de sesión y widget raíz o desde la biblioteca Kivi En este caso, por lo que no estamos importando ningún diseño de cuadrícula aquí. O lo mismo sería con botón. Entonces de KV, UIX ese botón botón Importar. Lo mismo para widget de texto. Así que aquí no estamos importando estos objetos. Entonces eso es sobre los objetos. Todos estos son objetos, y luego tienes estos atributos de estos objetos. Entonces, si abres un shell de Python e importas ese objeto de diseño de cuadrícula como lo mostré aquí, y luego haces el diseño de cuadrícula dentro de corchetes redondos, verás que CLS es uno de los atributos del objeto de diseño de cuadrícula Y así se trata de los objetos. Ahora, sobre la jerarquía de una app KV, funciona así. El más alto en jerarquía es la app. Entonces esta aplicación objeto aquí. Luego viene el administrador de pantalla, que en realidad está representado por el widget raíz. Entonces el widget raíz viene después de la aplicación, y luego tenemos la pantalla que está representada por la pantalla de inicio de sesión. Entonces esta pantalla de inicio de sesión es solo un hijo de la pantalla. Se comporta de la misma manera que una pantalla. Y por cierto, también podríamos haber hecho algo más aquí, que voy a mostrarles hace un momento. Simplemente podrías pasar la pantalla de inicio de sesión así. Y entonces aquí, lo que podrías hacer es agregar el Tidget raíz que está en jerarquía, está encima de la pantalla de inicio de sesión Y luego en la pantalla de inicio de sesión, podrías pasar nombre de inicio de sesión. Pantalla así como así. Y podrías borrar eso. Entonces ese sería el mismo código, y obtienes la misma salida, como puedes ver aquí. Entonces esto indica lo que acabo de decir que widget raíz es un padre y luego viene una pantalla de inicio de sesión y dentro de la pantalla de inicio de sesión, tienes diseño de cuadrícula, tienes otro diseño de cuadrícula, entrada de texto, y así sucesivamente. No obstante, para mantener el código más organizado, pues aquí en el widget raíz, más adelante, tendríamos que añadir otra pantalla como pantalla de registro y así ésta tendría sus propios hijos. Y así entonces tendría otra pantalla como pantalla error de inicio de sesión donde se enviaría al usuario si hubiera un error en las credenciales de inicio de sesión. Entonces el código se volvería demasiado complejo. Por lo tanto, lo que tenemos en cambio es, tenemos la pantalla de inicio de sesión como regla y también el widget raíz como regla. Y luego especificamos que la pantalla de inicio de sesión es en realidad un hijo del widget raíz que usa aquí. Y así, del mismo modo, agregamos otras pantallas de la misma manera. Entonces eso es algo a tener en cuenta porque te ayuda a entender mejor cómo funciona Kiwi. Y eso es lo que tuve de este video, y espero verte en el siguiente video. 178. Cómo crear una clase de cuenta bancaria: Bueno, en las conferencias anteriores, mencioné que voy a estar creando un programa y una aplicación donde estaremos manejando una especie de cuenta bancaria para que tengamos saldo, y luego estaremos aplicando algunas operaciones como retirar dinero del objeto de cuenta bancaria y depositar dinero también. Estaré almacenando el valor así el saldo en un simple archivo de texto. Entonces ese no es uno de los diez programas que estamos construyendo en el curso. Esto es solo para familiarizarte con las clases y explicarlas un poco más. Entonces voy a hacer algunas tareas de limpieza aquí. Entonces déjame crear una carpeta aquí. Y poner todos estos archivos existentes en esta carpeta. Así que tenemos los archivos anteriores aquí, y voy a crear una nueva carpeta ahora. Llamemos a esta cuenta. Y en esta carpeta, tendré mi script Python. Entonces llamémoslo así. Entonces bajo cuenta, tenemos este archivo Python, y también necesitamos este archivo de texto. Estaremos guardando el saldo actual de nuestra cuenta bancaria. Entonces esta será una aplicación trivial porque en la vida real, no quieres guardar la información de la cuenta bancaria, el saldo en un archivo de texto En la vida real, quieres guardar eso en una base de datos real, como bien post gras, por ejemplo. Pero por el bien de practicar objeto o esa programación, simplemente guardaremos el valor de saldo en este archivo. Entonces este es nuestro almacenamiento. Y también en aras de la simplicidad, estaremos trabajando sólo en una sola cuenta. Entonces nuestro programa podrá procesar un objeto de cuenta porque si tienes varias cuentas, entonces la solución podría ser diferente a esta. Entonces probablemente tendrías que pensar tener una mesa y tal vez una base de datos sería necesaria aquí. Entonces pensemos en nuestra cuenta personal. Podrías usar este programa para tus notas personales, por lo que es posible que quieras hacer un seguimiento de tu saldo y puedes usar este programa Python. Y ahora el objeto aquí es la cuenta bancaria. Y este objeto, deberíamos empezar a pensar qué atributos debería tener este objeto de cuenta bancaria como estado inicial. Entonces hablamos de este objeto mínimo, y una cuenta bancaria tendría, por supuesto, un saldo inicial. Entonces comencemos a crear este objeto de cuenta y llamarlo cuenta. Puedes llamarlo como quieras, pero yo lo llamaré cuenta. Entonces en ella está la primera función que queremos definir y nos pasamos yo ahí dentro. Y mantengámoslo así por un momento. Y dijimos que nuestro objeto de cuenta bancaria tendrá un atributo de saldo. Y en nuestro caso, tenemos este punto de saldo TXT, y vamos a crear un valor inicial ahí. Ahora, para crear una instancia de objeto, necesitamos agarrar este valor y pasarlo a nuestra función init para que construyamos este objeto mínimo Debido a que tenemos un archivo, lo que tenemos que hacer es que necesitamos leer este número de este archivo. Y, naturalmente, lo que querrías pasar aquí es algún parámetro como ruta de archivo. Entonces así es como voy a llamar a eso y ahora, si recuerdas, en la aplicación de librería en el script backend, aquí también pasamos un parámetro a la función init Y luego creamos un objeto de conexión de este archivo de base de datos. En este caso particular, lo que queremos crear es un número entero, por lo que un número fuera de este archivo fuera de esta ruta de archivo. Entonces podrías hacer algo como con open. Entonces estamos haciendo manejo de archivos con métodos con ruta de archivo abierto, y este es un archivo de texto, así que tenemos que ir con nuestro modo, lo que significa leer. Entonces estamos abriendo la ruta del archivo, este archivo en modo de lectura. Como expediente. Entonces esta es solo una variable temporal que existe en esto con una declaración. Y luego tenemos que leer de este archivo. Entonces algo así como archivo punto ROJO. Sí, eso es. Esto leerá el archivo, pero no lo vas a almacenar en ningún lado. Entonces lo que quieres hacer es decir auto y equilibrio es igual a archivo punto Leer. Entonces, lo que eso hará guardará el valor dentro del archivo de texto en esta variable de instancia. Entonces esta es una variable de instancia. Así se llama. En realidad, esta es la variable de instancia y este es el objeto, entonces el objeto account. Bueno. Esto es casi bueno. Y también necesitamos agregar la función integer ahí porque esto se leerá como una cadena por defecto. Entonces necesitamos convertir ese valor en un entero. Sí, eso debería funcionar, y eso debería construir el objeto para nosotros, el objeto acto con un equilibrio unido a él. Y antes de ir y crear el método like retire aquí y luego método de depósito. Prefiero llamar primero a una instancia de esta clase. Yo haré eso aquí. Digamos ordenar eso en la variable de cuenta. Entonces este será el objeto, el objeto que se creará a partir de este blueprint, el blueprint de cuenta, ahí hay que pasar este argumento, el argumento para este parámetro, que es balance Genial. Y para uno mismo Python pasará automáticamente la instancia de objeto de cuenta. Bueno. Ahora, esto creará una instancia de objeto. Y déjame imprimir ese objeto aquí. Entonces vemos alguna salida en acción. Python, y eso está dentro de la carpeta de la cuenta y act pi. Tenemos un error, no hay tal archivo o directorio para balance dot TXT. Y la razón de ello es que tenemos que pasar allí también el directorio de cuentas. Entonces y esta vez, está funcionando. Tuvimos que pasar el directorio ahí porque estamos en esta carpeta en la carpeta demo, y hay que pasar primero la carpeta de la cuenta y luego apuntar al saldo de TXT. Y esta es la salida. Entonces dice objeto principal de cuenta de punto. Entonces el objeto de cuenta del módulo principal. Y lo que es Min es cuando ejecutas un script, como hicimos aquí, así que apuntas al script con Python, Python asignará este nombre al módulo. Entonces este módulo obtendrá este nombre y el script, en realidad, pero se trata como un módulo. Pero si importas ese módulo. Entonces si corrí, abro un shell interactivo ahora. Entonces desde la carpeta de la cuenta, importar. AC lo que sucede es que también se ejecuta la función de impresión. Pero esta vez cuando importas archivo, así cuando no lo ejecutas como lo hicimos anteriormente con cuenta de Python, AC que Pi, cuando importas el módulo, el módulo obtiene el nombre de script en el que está escrito. Entonces en este caso, es AC sin la extensión. Y aquí también se obtiene el nombre del paquete del módulo. Entonces los paquetes están hechos de módulos, y un paquete es como una carpeta, y ahí tienes varios módulos o un módulo, como tenemos en este caso. Nuestro paquete aquí es cuenta, entonces cuenta, y luego tiene este módulo, y luego este módulo tiene esta clase, la clase de cuenta. Entonces eso era algo que quería mostrarte paquetes, módulos y clases. Genial. Ahora, saldré este shell de Python y jugaré un poco con este script. Y lo que hicimos aquí, imprimimos el espacio de nombres del objeto, y no obtuvimos el saldo real como salida porque no estamos devolviendo el saldo aquí. Pero si quieres obtener el saldo, quieres apuntar al saldo, y eso usa una notación de puntos para apuntar al objeto que contiene el atributo balance. Entonces veamos qué obtenemos esta vez. Y si, mil. Entonces ese es el saldo actual. Como puede ver, puede acceder a los atributos de su instancia de objeto, utilizando la notación de puntos. Bueno. Ahora vamos a agregar estos otros métodos ahí. Y ¿qué podemos hacerle a una cuenta bancaria? Bueno, podemos retirar dinero. Y siempre necesitas pasarte a ti mismo en todos tus métodos, y luego el parámetro que aplica a ese método en particular. En este caso, cuando retiras algo de dinero, bueno, tienes una cantidad en mente que quieres retirar. Entonces se pasa cantidad ahí como parámetro. No, sólo para que quede claro que entiendes lo que estoy haciendo. Lo que estoy haciendo aquí es que tengo un saldo inicial que se está leyendo de este archivo, entonces este archivo de texto, y luego quiero permitir que el usuario aplique operaciones, así que retire dinero de este saldo. Y una vez que el usuario ejecuta el método de retiro, quiero actualizar el número de saldo dentro de la instancia del objeto Y aún no quiero escribir ese saldo en mi archivo de saldo. Así que solo quiero calcular algo aquí como uno mismo es igual al equilibrio del uno mismo. Bueno, esto es un retiro, así que menos la cantidad que quiero retirar. Eso significa que esto hará auto balance igual a 100 -100, digamos, y terminaré con un saldo actualizado de 900 en este caso Que si quiero, puedo seguir adelante y volver a abrir ese archivo aquí y luego escribir este saldo actualizado en ese archivo. Entonces esa sería una solución. Pero una solución más constructiva probablemente sería tener un método específico que comprometa los cambios en el archivo. Por lo tanto, es posible que desee retirar algo de dinero y luego depositar algo de dinero dentro de la misma sesión, y luego aplique el método de commit para guardar los cambios. Entonces esta es la solución a la que quiero ir. Sí, ya terminamos con el método de retirar. Ahora deposita auto y monto otra vez. Entonces esta es una variable local. Esta es una variable local. Sucede que tienen el mismo nombre, pero no tienen que hacer mucho el uno con el otro. Y el auto balance es igual al auto balance más la cantidad en este caso. Veamos para qué tenemos esto. Y voy a mantener aquí este objeto de instancia que se está generando. Entonces estamos insaciando una instancia de objeto, en otras palabras, e imprimimos el saldo actual Y luego quiero retirar algo de dinero. De mi cuenta objeto. Eso significa que aplico retirar al objeto de cuenta, y retirar toma dos argumentos. Entonces la instancia objeto, que se pasa automáticamente, y luego la cantidad, que podría ser de 100. Y una vez que haga eso, quiero imprimir el saldo actualizado. Veamos qué va a hacer. Sí, mil. Entonces se crea una instancia de objeto y obtienes mil impresos porque aquí tienes 100, y luego sacas 100 de eso y así terminas con 900. Genial. Entonces, si vuelves a ejecutar eso, notarás que se está creando de nuevo una nueva instancia de objeto . Entonces ya no tienes 900 como saldo actual. Tienes 1,000. Entonces eso significa que necesitas escribir los cambios en el archivo si quieres guardar ese saldo. Y podemos hacerlo usando métodos. Vamos a llamarlo commit. Y pasa el ahí. Y no pienso ningún parámetro que necesite pasar por este método de commit porque todo con lo que trabajaremos son las variables existentes ahí. Entonces esto sería algo así como con open, bueno, necesitamos abrir la ruta del archivo, pero tenemos un pequeño problema aquí porque una variable de ruta de archivo ahora es solo una variable local en este método init Entonces si lo pasamos aquí, esta función, este método, no lo reconocerá. Entonces esto es un poco diferente del otro el script de backend que escribimos, porque aquí teníamos este parámetro como lo hacemos aquí Pero en este caso, este parámetro, sólo se utilizó dentro del método init Entonces no lo usamos en ningún otro lado. Entonces hay una solución a eso. Una solución sería seguir adelante y pasar otra llamemos aquí a este camino. Entonces otro parámetro para el método commit. Entonces cuando llamamos al método commit como lo estábamos haciendo con retire, tendríamos que pasar el punto de saldo TXT. En realidad, este camino hacia el método commit. Si bien eso funcionaría, todavía no es la mejor práctica del paradigma orientado a objetos. Entonces necesitamos buscar otra solución. Y eso sería para hacer esta variable local y variable de instancia. Y para hacer eso, harías algo como self y file path es igual a ruta de archivo. Y lo que esto hace es así ruta de archivo, no confundas esto con esto Esto pasa a ser lo mismo, pero también puedes escribir otra cosa aquí, como cualquier cosa. Entonces este es el parámetro de la función de unidad. Entonces el saldo que TXC irá a este parámetro. Entonces la ruta de este archivo irá a este parámetro. Y luego se crea esta variable de instancia, y esa variable de instancia será igual a esta ruta. Pero puedes usar esta cosa aquí. Puedes usarlo donde quieras dentro de tu clase. Y en nuestro caso, nos gustaría usarlo aquí. Entonces abrimos la ruta del archivo self en el método correcto esta vez porque esta vez necesitamos escribir o sobrescribir con mayor precisión para sobrescribir el saldo actual, que debería ser este , por ejemplo Queremos anular eso a este archivo. Entonces, como archivo, esto es solo un archivo variable temporal y un archivo de escritura de puntos y balance de puntos propios. Bien, probemos esto. Y no obtuvimos ninguna actualización en el archivo aquí porque olvidé llamar realmente al método commit. Y así una vez que retiremos dinero, vamos a imprimirlo en la consola. Y luego cuenta punto Commit sin pasar ningún argumento explícitamente porque implícitamente estamos pasando la instancia del objeto Bueno. Y tenemos un error ahí literal inválido para entero con base diez. Entonces este sería el entero en la línea seis. Aquí así el valor que está siendo leído por este método no es convertir a un entero. Y la razón es que este valor ha desaparecido del balance que txty, y esto es leer una cadena vacía Entonces esta es una cadena vacía que se está leyendo de este archivo, entonces intentas convertir eso y no funciona. Ahora bien, la razón por la que tenemos esta cadena vacía archivo vacío aquí es cuando obtuvimos el error anterior, así que aquí tenemos el argumento debe ser cadena, no entero. Entonces, lo que hizo Python fue abrir el archivo con el método, pero luego no fue capaz de escribir realmente un valor dentro de ese archivo. Entonces el archivo terminó vacío. Entonces déjame escribir ahí el valor inicial, y luego ahora deberíamos poder ejecutar eso de nuevo. Y si, ahora tenemos el valor actualizado. Entonces nuevamente, lo que hicimos es que creamos la instancia del objeto, y luego imprimimos en el saldo actual, que se leyó de este archivo, que era 1,000 al principio, y luego retiramos 1,000, así se actualizó el saldo, y luego comprometimos esos cambios a este archivo, así conseguimos 900 ahí Ahora, lo mismo si quieres agregar, digamos, 200 y depositar. A ver si esto va a funcionar. Sí, esto fue impreso . Comprobemos el archivo. Sí. Entonces este es nuestro nuevo equilibrio. Y sí, espero que esto aclare algunos conceptos sobre la programación orientada a objetos Si eres creativo, puedes seguir adelante y ampliar este script, para que puedas agregar más métodos allí y tal vez hacer de esto más una aplicación de la vida real. Tan genial. Y esto es sobre esta conferencia, y en la siguiente conferencia, hablaré de herencia, y estaremos ampliando este guión aplicando la herencia ahí dentro. Así que habla contigo en la próxima conferencia. 179. Crear clases mediante herencia: Impresionante. Casi terminamos con las clases. Pero hay un último concepto que necesito que conozcas, y ese es la herencia. herencia es el proceso de crear una nueva clase a partir de una clase base. Entonces una nueva clase que tiene todas las propiedades y los métodos de una clase base, pero también tiene algunos otros métodos. Entonces, ¿por qué hacemos eso? Bueno, te lo explicaré a través de nuestro ejemplo. Entonces aquí tenemos este plano, entonces esta clase. Y déjame borrar esto para no confundirte. Entonces ahí solo estábamos llamando a las instancias de clase. Entonces tenemos esta clase que crea un objeto de cuenta bancaria para nosotros. Entonces podremos retirar y depositar dinero de la cuenta bancaria. Ahora bien, ¿y si queremos transferir dinero de esta cuenta bancaria? Entonces desde nuestra cuenta bancaria, transferir dinero a otra cuenta bancaria. Bueno, tendríamos que agregar un método de transferencia aquí. Y luego haz algo como simplemente simple como auto balance igual a auto balance menos la cantidad. Entonces pasamos una cantidad de transferencia ahí, y eso se resta de nuestro saldo aquí Pero por lo que yo sé, no puedes transferir dinero de tu cuenta de ahorro. Puedes transferir dinero desde tu cuenta corriente, pero no desde una cuenta de ahorro. Entonces ese método no tendría sentido para una cuenta corriente. Y esta cuenta es una cuenta bancaria general. Entonces lo que podríamos hacer es tal vez podríamos crear otra clase, como si pudiéramos copiar esto y crear otra clase y llamarla de otra manera. Y así tenemos todos estos métodos ahí. Entonces esa es una solución. La otra solución es usar herencia. Entonces aquí es donde la herencia viene muy bien. Se deriva una clase de una clase base, que es una clase más general como esta clase de cuenta aquí. Así que vamos a crear una nueva clase. Esta nueva clase se conoce como una subclase, y esta será la clase base Así que de nuevo, necesitas usar el mismo syndax usas una clase Q o ahí para crear una Llamemos a esto cuenta de cheques para cheques. Lo primero que queremos hacer es crear un método innit Con ese método init, crearemos como este objeto mínimo del que he estado hablando Al igual que en nuestra clase base, también necesitamos aquí, necesitamos un saldo de nuestro archivo, así que necesitamos esa ruta de archivo. Pero en lugar de volver a escribir este código, como dije, lo que puedes hacer es, bueno, primero, necesitas crear un método de función init, y, por supuesto, pasarte ahí mismo Siempre se pasa el parámetro self, ya sean clases base o una subclase Entonces en este método init, quieres llamar al método init de tu clase de cuenta, que significa que cuando creas una instancia de objeto de tu clase check, este método se ejecutará cuando se ejecute este método, este método ejecuta la función init de tu método account para que crees este objeto minimal, es el mismo que pero entonces tendremos algunos métodos adicionales aquí abajo. Entonces una cuenta corriente es esto más algunas otras cosas. Y aquí hay que pasar self y el otro parámetro que es necesario para esta función init Entonces aquí estamos pasando dos parámetros, y deberíamos hacer lo mismo aquí. Y si ejecuto esto ahora, obtendré un error. Entonces, por intención, quiero que veas qué error obtenemos. Así que permítanme crear una instancia de esta función. Así que comprobando Oh, sí, probemos eso. Um, aquí. Sí. Eso está dentro de la carpeta de la cuenta, así que aquí, y luego punto pi. A ver. Entonces lo primero que esto está diciendo es que la ruta del archivo no está definida en la línea 21, que es esta de aquí. Y la razón de ello es que no hemos definido ninguna ruta de archivo dentro de esta función. Así se puede pasar eso dentro de los corchetes init como parámetro Y entonces hay que pasar eso aquí también. Entonces digamos contar saldo punto TXT. Bueno. Y ahí no vemos ninguna salida porque no estamos imprimiendo nada. Pero lo que sucedió básicamente es que se creó una instancia de objeto y a esto se le llamó a este método. Y esta clase también fue inicializada. Ahora bien, si tratamos de hacerlo el objetivo de la herencia es hacer algo como verificar para acceder a los métodos de la clase base sin escribir esos métodos en tu subclase Entonces digamos comprobando ese depósito, y pongamos una cantidad ahí. Entonces diez. Ahora bien, si ejecutamos eso, obtenemos este error de atributo que dice que check object no tiene atributo deposit, así que esto no es reconocer este método. Y la razón de ello es que aún no hemos satisfecho la sintaxis de herencia. Y así la clave aquí es pasar un argumento a nuestra subclase check Y ese argumento es una clase base, entonces el nombre de la clase base. Di eso si haces lo mismo ahora y tal vez imprimes la salida para ver lo que está pasando, auto balance de puntos. Perdón, quería decir comprobando ese saldo. Perdón por eso. Y si, ahora parece estar funcionando. Entonces se reconoció este método, y lo que esto hizo fue de 1,100, que era el saldo inicial, subió a 1,110 Entonces esto imprimió la variable de inceso de saldo de la clase base Entonces así es como depositamos algo de dinero en nuestra cuenta corriente. Ahora, queremos transferir dinero, entonces necesitamos definir un nuevo método aquí, llamemos a esta transferencia. Transferir auto allí y también una cantidad variable local, así como parámetro. Entonces esta es solo una variable local. No tiene que ver con estos una vez aquí. Y luego queremos actualizar el saldo. Entonces queremos transferir algo de dinero a alguna cuenta. Esa cantidad se restará de nuestro saldo. Entonces eso significa auto balance igual a auto balance menos cantidad. Ahora si probamos Nuevo método ahí. Entonces estamos en este punto. Vamos a transferir 110. Sí. Y yo estaba esperando tener mil 100 aquí, pero tengo este número Y la razón de eso es porque no cometimos los cambios antes cuando depositamos algo de dinero. Entonces, cuando ejecutamos el script ahora, se creó una instancia de objeto desde el principio y obtuvo este número aquí, que no se actualizó a esto porque no cometimos los cambios antes, pero se entiende la idea. Entonces de este saldo, restando éste de aquí, obtenemos Eso significa que el método de transferencia está funcionando, pero solo necesitamos aplicar el método commit allí. Nuevamente, podemos comprometer esos cambios. Sí, veamos qué tenemos ahora. Entonces de 1,100, quiero transferir 100, y ahora espero tener esto actualizado a 1,000 A ver. Sí, mil impresos aquí y mil aquí también. Entonces eso está funcionando muy bien. Además, otra cosa que quiero que sepas sobre la herencia es que puedes agregar tus propias variables de instancia para tu subclase Al igual que, en este caso, nuestra única variable de instancia es balance, que ha sido heredada de la clase base de cuenta. Pero podemos agregar nuestras propias variables de instancia. Entonces supongamos que esta transferencia también viene con alguna tarifa. Entonces, cuando haces una transferencia, tu banco te cobra algo de dinero. Y quieres dar esa tarifa como parámetro. Así que mantengamos las cosas simples y digamos, cuando transfieras dinero, así que saldo menos cantidad menos la comisión. Entonces no apliquemos porcentajes ahí. Digamos, supongamos que tenemos una tarifa de $1 por transferencia. Ahora bien, si aplicamos de nuevo el método de transferencia, probablemente obtendremos un error porque esta tarifa es solo una variable local aquí. Entonces, lo que necesitas aplicar ahora es que necesitas transformar esta tarifa en una variable de instancia, que es la tarifa de autopunto igual a la tarifa. Eso significa que si pasas ahora una cuota aquí, digamos, $1 o cualquier otra moneda, y la pasas aquí, entonces esto irá aquí, y eso irá aquí, y esto será igual a la tarifa que estás pasando aquí. Y luego podemos hacer uso de esta variable de instancia y usarla en este método de transferencia. Genial. Ahora estamos a mil ahí, y déjame ejecutar esto. Sí. Entonces 899, y son los mismos aquí, lo que significa 100 -100 menos la cuota, obtienes este número Y sí, espero que seas capaz de ver cómo herencia es útil para crear subclases a partir de la clase base Eso es todo para esta conferencia, y tenemos una conferencia más para ir. Y en la próxima conferencia, lo que voy a hacer es aclarar algunos términos de programación orientada a objetos. Entonces esa será una breve conferencia, y eso te ayudará más adelante cuando te refieras a documentación porque hay bastantes conceptos por ahí en OOP, y no quiero que te confundas con esos Entonces creo que esa es una conferencia importante. Sí, luego hablaré contigo. 180. Glosario de POO +++: Hola otra vez. Y en esta conferencia, me gustaría asegurarme de que conoces la terminología de la programación orientada a objetos en Python. Entonces ahora tenemos la clase, que es este blueprint aquí, o se le puede llamar un prototipo que defina las características de un objeto que está a punto de ser creado Entonces esa es la clase, y luego tenemos la instancia del objeto o simplemente el objeto. Por lo que este año es un objeto. Entonces un objeto de cuenta corriente que almacena datos en esta ruta de archivo específica, y tiene este atributo. Por lo que tiene esta cuota. Entonces tenemos variables de instancia, y estas son variables que se definen dentro los métodos de la clase como ruta de falla aquí. Y estos son accesibles por la instancia por la instancia de objeto que es creada por esa clase. Entonces también tenemos algo llamado variable de clase. Así variables de instancia y variables de clase. Ahora bien, no creamos una variable de clase en ninguna de las conferencias anteriores. Así que voy a seguir adelante y crear uno ahora. Vamos a crear uno para nuestra cuenta corriente. Entonces eso sería algo así como digamos tipo es igual a dos. Sacudiendo. Entonces una variable de clase se declara fuera de los métodos de esa clase, y las variables de clase son compartidas por todas las instancias de la clase. Así que las variables de instancia son compartidas solo por la instancia del objeto. Por ejemplo, déjame explicarte eso. Aquí, estas son una de nuestras instancias de objeto, así que aquí solo tenemos una instancia de objeto, pero podríamos tener más. Entonces voy a copiar esto y crear otra instancia de objeto aquí. Y voy a llamar a esto digamos que esta es la cuenta corriente de Jack. Entonces voy a reemplazar eso y aquello aquello. Y esta es la cuenta corriente de John. Y también tienen ahí su almacenamiento personal. Entonces digamos Jack dot TXT y Joan dot TXT. Entonces Jack tiene $100 y Joan tiene $200. Bueno. Entonces tenemos que cambiar a ese Jack Jack y Joan. Y si ejecutamos ahora este script, obtendremos dos valores impresos. Entonces menos uno para esta declaración aquí porque Jack tenía así que tenía 100 dólares ahí, pero luego transfirió 100 y luego menos la tarifa de $1. Y luego terminó con menos $1 ahí. Es dueño del banco algo de dinero. Y entonces John tenía 200, así que ahora tiene 99. Entonces lo que estoy tratando de decir es que estas variables pertenecen sólo a su objeto. Pero si lo intentas ahora, Jack está comprobando el tipo de punto. Entonces quieres imprimir ese tipo de punto Imprimir Jones checando. Verás que esta variable de clase es compartida por todas las instancias de esa clase. Entonces, ¿cuál es la diferencia entre las variables de clase e instancia Las variables de clase rara vez se usan así que realmente tendrás que pasarlas aquí. Otro concepto ahora doc. strings. Y generalmente se pasa una cadena de documentos tan pronto como escribes la palabra clave clas, así que solo baja la palabra clave class. Eso proporciona la explicación de tu clase. Digamos que esta clase genera objetos de cuenta corriente. Entonces cierras eso con tres comillas. Entonces lo que eso hace es, ya sabes, si lo imprimimos, así que agarramos una de nuestras instancias de objetos, digamos, Jo está comprobando punto. Doble subrayado, Doc, y doble subrayado nuevamente . Así que imprima eso. Entonces, como ves, se usa una cadena para proporcionar alguna información sobre esa clase. Entonces es bueno definir la cadena cuando estás escribiendo clases para que otros, si usan tu clase, puedan aplicar esta operación aquí, puedan ver de qué se trata la clase. Esto es particularmente útil cuando se están importando clases desde módulos. Entonces, cuando en realidad no ves el código de tu clase, y puedes hacer esto y tienes acceso a la cadena doc de la clase. Y entonces tenemos un concepto de miembros dota, que en realidad se refiere a variables de clase o variables de instancia. Entonces este es un miembro de datos y este también es un miembro de datos también. Entonces tenemos el constructor, que era esta función init Y como sabes, la función init, así el constructor construye tu clase Entonces tienes métodos de clase que aplicas a tu instancia de objeto. Entonces, la transferencia es un método de clase. Entonces este también es un método, pero es un método especial, entonces es un constructor. Y la instanciación, si escuchas hablar de la instanciación, ese es un proceso de creación de instancias de objetos Entonces instancias de una clase. Así es la instanciación de la clase. Y éste de aquí también. Y, ya sabes, la herencia ahora la herencia es cuando creas una subclase a partir de una clase base Y esta subclase comparte los métodos de la clase base, además tiene sus propios métodos que son específicos de esa subclase A veces también se oye hablar de atributos, y los atributos son este de aquí. Entonces, cuando accedes a estas variables de instancia o incluso variables de clase o incluso variables de instancia, puedes decir que estás accediendo a atributos de tu instancia de clase, de tu objeto. Y sí, eso es sobre el vocabulario de la programación orientada a objetos en Python. Y realmente creo que te he dado una sólida comprensión de la programación orientada a objetos y la creación clases y objetos y así sucesivamente. Si aún encuentras algo confuso, puedes volver a ver los videos porque sé que la programación orientada a objetos es un poco complicada, pero incluso puedes hacer preguntas, y haré todo lo posible para explicarte cosas que aún no te quedan claras. Sí, espero que esto te resulte útil. Y hablaré contigo en la próxima conferencia, así que terminamos con esta sección, y te veré más tarde. 181. Aplicación 7: demostración de una aplicación móvil para sentirse bien +: Hola, y bienvenidos a una nueva sección, por supuesto. Esta sección es bastante especial porque aquí vamos a construir una aplicación móvil. Hasta el momento, hemos trabajado con aplicaciones de escritorio o aplicaciones web. Pero en esta sección, la app que vamos a construir puede ejecutarse en dispositivos Android e IOS, y también puede ejecutarse en dispositivos de escritorio. Así que vamos a construir una sola aplicación con una interfaz gráfica de usuario, y los usuarios pueden usarla en escritorio, en Android e IOS. Esta aplicación va a tener una interfaz de inicio de sesión donde el usuario puede iniciar sesión y también registrarse para registrarse como usuarios de la aplicación. Y luego pueden presionar algunos botones para obtener algunas cotizaciones. Desde la app. Entonces dirán cómo se sienten si se sienten felices o tristes o amados, por lo que darán una sensación. Y la app intentará hacerlo así que si el usuario está triste, la app intentará hacerlos felices dando una cotización que sea relevante para su estado de emociones. ¿Correcto? Entonces esta es la app. Seguro que va a ser interesante. Vamos a usar la biblioteca KeV. Es una biblioteca de terceros para Python, que permite construir aplicaciones, por lo que también aplicaciones de escritorio y móviles. Así que vamos a sumergirnos y hablaré contigo en la próxima conferencia. Nos vemos. 182. Crear una página de registro de usuario: Anteriormente, construimos este código Python y este código Kiv. Entonces es una aplicación Kiv, que ejecutas ejecutando el código Python, no el código Kiv Entonces aquí, presiona el botón redondo, y esto es lo que tenemos. Admitámoslo, es una interfaz guapísima, pero hace bastante frío por ahora porque cuando presionamos estos botones, no pasa nada. Entonces, sigamos adelante e implementemos el botón de registro. Entonces lo que queremos hacer es cuando el usuario presiona un botón de registro, queremos cambiar la página, la pantalla a otra pantalla con otro conjunto de widgets. Para eso, necesitamos asignar una llamada de función al botón de registro. Entonces sigamos adelante y vayamos al código QV, localicemos el botón registrarse, que está aquí Y así el botón obtiene este atributo, el atributo de texto, pero también puede obtener otro atributo llamado al presionar sobre subrayado prensa Lo que hace ese atributo es cuando el usuario presiona el botón, vas a llamar a la función de registro de punto raíz. No olvides el paréntesis del código. Entonces, ¿qué es root y qué es registrarse? Root es un nombre especial que puede usar dentro de un archivo QV, y root se refiere a la clase del widget de regla El widget de regla aquí donde estamos, es la pantalla de inicio de sesión. Entonces la clase de pantalla de inicio de sesión, que es la pantalla de inicio de sesión. Entonces, en realidad, root se refiere a la clase de pantalla de inicio de sesión. Y ahora estamos usando esta notación de puntos. Entonces estamos usando el método de la pantalla de inicio de sesión. Así que regístrate en la pantalla de inicio de sesión donde no hay método de registro, pero podemos crear uno. Definir signo. Arriba, usa el parámetro self para los métodos de clase. Y entonces hagamos algo sencillo por ahora. Solo vamos a imprimir. pulsación del botón de registro es solo una cadena, lo que significa que se va a imprimir en la terminal. Vamos a probar esto. Guarde el archivo Kiwi y ejecute el archivo Python. Y luego presione registrarse y como puede ver en el terminal, botón de registro presione cadena se imprime en cualquier momento que use el botón de registro. Entonces es tan sencillo como eso. Use atributo al presionar, y cada vez que se presione el botón, se llamará al registro. Esta función. Entonces ahora lo que queremos hacer de verdad es cambiar la pantalla. Pero primero, necesitamos crear una pantalla. La forma de crear pantallas es en el archivo Kiwi. Entonces tenemos la pantalla de inicio de sesión aquí. Ahora queremos crear, llamemos a esta pantalla de registro. Después de la regla, usa la columna, un toque para sangrar. Y así es como se verá esta nueva pantalla. Entonces tenemos una etiqueta. Tenemos dos cuadros de entrada de texto, y tenemos un botón. Y todo está dentro de un diseño de cuadrícula. Con una columna. Y esta columna simplemente tendrá un nivel con texto. Apúntate a un viaje espacial. ¿Por qué no? Siéntete libre de usar tu imaginación, pero asegúrate de que esto esté dentro de las cotizaciones. Entonces es una cuerda. Luego viene una entrada de texto. El uso de Et como texto de sugerencia. La cadena de nombre de usuario. Entonces, ¿qué se va a mostrar en el cuadro de texto como una pista? Otra entrada de texto con pista. Texto. Lo adivinaste. Contraseña. Y por último, un botón. Con texto, enviar. O puedes escribir regístrate lo que quieras. Entonces estas son solo cadenas. Puedes usar lo que quieras. Entonces la idea es que cuando el usuario presiona el botón enviar, los datos, así el nombre de usuario y la contraseña serán enviados a la base de datos donde estamos guardando los nombres de usuario y contraseñas. Por lo que esta base de datos será legible, para que podamos escribirla. Podemos agregar más nombres de usuario a esta base de datos, y también será legible, lo que significa que cuando un usuario intente iniciar sesión, vamos a leer esta base de datos para ver si el nombre de usuario y la contraseña el usuario está tratando de enviar con un botón de inicio de sesión están o no en esta base de datos. Y esta base de datos va a ser un archivo JSON, que es una forma sencilla de manejar datos de nombre de usuario y contraseña. Derecha. Ahora bien, si guardas este archivo Kiwi y ejecutas el script Python, no va a pasar nada porque el botón de registro sigue imprimiendo esta cadena de símbolos, y la pantalla que acabamos de crear no se está enviando a todas partes para que se muestre. Por lo que no estamos dando ninguna orden para mostrar la pantalla de registro. Entonces, lo siguiente que debe hacer es listar la pantalla de registro entre los widgets del widget raíz, por así decirlo, nombre registrarse. Pantalla. Entonces las pantallas tienen que tener un nombre. Y la razón de eso es porque aquí ahora en el botón de registro, lo que podemos hacer es la magia de hacer self dot manager punto actual igual a registrarse pantalla. Así que la pantalla de registro es esta cadena aquí que acabamos de crear. Guarde el archivo Kiwi y ejecute el archivo Python para ver qué está pasando. Por lo que puede obtener este error de vez cuando excepción de fábrica del factor KV, pantalla de registro de clase desconocida, lo que significa que es un error que ocurrió en su archivo KV. La pantalla de registro de clase, que es esta de aquí, se desconoce porque no hay clase KV en la biblioteca Kiv, como lo es para etiquetas de diseño de cuadrícula Estas son todas las clases en la biblioteca Kiwi. Así que la pantalla de registro no es una clase en la Biblioteca KV, y no es una clase declarada en el archivo Python. Entonces, lo que necesitas hacer es crear una clase de pantalla de registro. Heredando de pantalla y por ahora, solo pasa, ejecuta de nuevo e inscríbete. Y esta es nuestra nueva pantalla. Entonces obtuvimos la etiqueta dos cuadros de entrada de texto y un botón de envío, que no hace nada por ahora porque esta pantalla de registro está conectada a la clase que acabamos de crear la clase de pantalla de registro. Entonces, cualesquiera que sean las acciones que se tomen en esta página, en esta pantalla del usuario, van a corresponder con algunas funciones que vamos a agregar a la pantalla de registro. Y déjame explicarte esta línea aquí, self dot manager dot current. Entonces yo se refiere a la instancia de esta clase actual, de la clase donde está el yo. Así que el objeto de pantalla de inicio de sesión. pantalla de inicio de sesión es la clase, y self es el objeto que se ha instanciado a partir de esta clase que se ha creado a partir de esta Y entonces manager manager es propiedad de pantalla. Entonces, dado que esta clase está heredando de la pantalla, entonces la pantalla es padre y la pantalla de inicio de sesión es una hija Y el padre le está dando al hijo todos sus métodos, todas sus propiedades, todos sus atributos, incluyendo manager, claro. Así que self es capaz de acceder manager, y luego manager tiene su propio atributo que es actual. Tan actual de gerente y gerente de pantalla de inicio de sesión. Y este atributo actual obtendrá el nombre de una pantalla a la que desea cambiar, que es pantalla de registro, esta pantalla de registro aquí, que es un widget que hemos creado aquí. Y esa es la idea. Así es como cambias entre pantallas usando QV. Gracias. 183. Capturar la información del usuario: Hola, otra vez. Lo que tenemos hasta ahora en nuestra app KV es la primera página de la app, la cual elegí para nombrarla como pantalla de inicio de sesión. Entonces aquí es donde los usuarios ingresan y se registran. Y el botón de inicio de sesión no se ha implementado, por lo que se olvida la contraseña y el botón de registro funciona. Ahora bien, hay algunas cosas que quizás quieras hacer a continuación, como, por ejemplo, podrías querer hacer algún trabajo de diseño para podrías querer hacer tener algunos espacios entre estos botones, estas entradas de texto y este botón, estas entradas de texto y este botón, o tal vez hacer que estos dos botones más pequeños y solo mostrarlos como enlaces en lugar de botones con cuadrados. Pero puedes hacer eso, pero lo que prefiero hacer yo mismo es primero, quiero hacer un diseño mínimo, lo que significa que quiero que el diseño funcione. Yo sólo quiero que sea suficiente para mí ver los botones por ahora. No me importa si son demasiado grandes o demasiado pequeños. Quiero que trabajen. Entonces presiono un botón de registro, entonces quiero poder aquí a la derecha? Yo uso un nombre y contraseña. Y cuando haga clic en Enviar, quiero almacenar estos datos en la base de datos. Entonces quiero crear un nuevo usuario con esos datos. Y luego al final, después haber completado todas las funcionalidades del programa, quiero jugar con un diseño para hacerlo más parecido. Entonces en esta conferencia, sigamos adelante e implementemos el botón de enviar para que estos datos se almacenen en un archivo JSON. Bien, así que localicemos el botón submit que está aquí y agreguemos el atributo press, que va a ejecutar el punto raíz. Entonces la raíz es una clase de pantalla de registro. Éste de aquí. Vamos a ejecutar el método de esa clase. Llamemos a este método add user. Bien, así que sigamos adelante y agreguemos esa función ese método. Agregar usuario self vamos a pasar por ahora. Entonces este método va a obtener los valores, así el nombre de usuario y los valores de contraseña, y enviarlos y almacenarlos en Archivo adyacente. Entonces, ¿dónde están los valores? Bueno, podemos acceder al nombre de usuario usando los ID de root, punto, y aquí ingresamos el ID del widget donde se ingresará el nombre de usuario. Entonces el widget de entrada de texto. No tiene identificación, pero podemos darle una identificación. DNI. Nombre de usuario. No debería estar entre comillas, así que es sólo una variable. Entonces aquí escribirás nombre de usuario. Ahora bien, si lo dejas así, y además obtienes root que ID esa contraseña. Así que vamos a darle una identificación a la contraseña también. Columna de identificación, contraseña, así como así. Y luego en la función de usuario de anuncios, crear algunos parámetros. Puede ser usando una contraseña. Así que igual que estos Ds, pero no está relacionado. Puedes tener cualquier nombre de parámetro como quieras aquí. Y por esa razón, me gustaría escribir en realidad Nombre P palabra, así que no debe confundirse con estas identificaciones. Y por ahora, permítanme simplemente imprimir U Nombre y P palabra, sólo para ver lo que tenemos hasta ahora. Bien, inscríbase. Digamos u1p1, algún nombre de usuario y contraseña. ¿Por qué no? Envía y si no obtienes nada, tal vez no guardamos el archivo QB El archivo Python se guarda automáticamente, y vuelve a registrarse, U uno, P uno, enviar. Sí, enviar, enviar. Entonces lo que estamos obteniendo a cambio es esto, que corresponde a Nombre, y esto es P palabras. Entonces estos son los objetos de entrada de texto. Ahora bien, si quieres el texto que el usuario ingresa en estos cuadros de entrada de texto, entonces necesitas acceder a la propiedad text. Lo mismo para contraseña, guardar, ejecutar y cerrar esta ventana anterior para obtener la nueva. Uno P uno, enviar, y ahora obtenemos el texto real que el usuario ingresó. Entonces así es como obtenemos valores de los cuadros de entrada de texto y los enviamos a Python para su posterior procesamiento. Entonces root se refiere a una pantalla de registro. Agregar usuario es un método en la pantalla de registro. Una raíz de nuevo es la pantalla de registro. Los ID de clase son una propiedad del objeto de pantalla de registro, que en realidad proviene de la pantalla. Así que la pantalla lo hereda para registrarse pantalla y la pantalla de registro tiene estos ID, lo que en realidad da una especie de diccionario con todos los ID contenidos en la regla de la pantalla de registro Entonces en este caso, te da acceso a nombre de usuario a contraseña. Root ID esa contraseña, te da texto al objeto de entrada de texto que tiene una contraseña de ID, y luego con el texto accedes al valor real de eso en la siguiente conferencia, adelante y trabajemos con JSON File para almacenar estos datos en el archivo JSON. 184. Procesamiento de las inscripciones de usuarios y +: Hola, nuevamente, en esta conferencia, vamos a implementar la pantalla de registro para que cuando el usuario ingrese el nombre de usuario y la contraseña y luego haga clic en Enviar, estos datos van a ser almacenados en el archivo JSON de los usuarios, cual lo tengo aquí. Entonces puedes crear un archivo vacío y llamarlo como usuarios punto JSON, o puedes obtener mi archivo, que puedes encontrar adjunto en los recursos de la conferencia. Y en este archivo, ya tengo dos usuarios. Estos son datos JSON. Para que se vea mejor, puedes formatearlo usando si estás en Windows, usa Shift Alt F. Si estás en Mac, usa Shift Option F. Si estás en Linux, usa Control Shift I. Cuando hagas esa combinación, lo que va a pasar es que vas a tener el código JSON formateado así. La idea aquí es que la aplicación va a agregar más usuarios aquí cuando el usuario presione ese botón de enviar en la página de registro. Este es básicamente un gran diccionario Python. Comienza aquí y termina aquí. Este diccionario tiene valores como esta clave aquí. Y el valor de esa primera clave, así que esa es la clave del gran diccionario. El valor de esta clave es este diccionario. Entonces es otro diccionario dentro del diccionario grande, pero ese es otro problema. Puede suceder como en este caso. Y así este diccionario tiene los datos. Entonces el nombre de usuario, vuelve a ser, usuario uno así. La contraseña es passover uno. Entonces este es un usuario existente. Creé manualmente este archivo, pero el programa también podrá crear este archivo y agregar más usuarios. Y así aquí es donde termina el valor de esta clave y luego inicia la otra clave, el otro usuario usuario dos. Ese es el nombre de usuario. También puedes ver aquí, paso dos, y esta es una fecha en la que se insertó este nombre de usuario en el archivo JSON Mantengamos este archivo abierto aquí abajo. Apretar el espacio terminal. Y así el usuario presiona el botón enviar, el botón enviar, llama a la función de usuario del anuncio, y estos dos argumentos se pasan a la llamada a la función. Entonces agregar usuario es este de aquí. Entonces nombra P palabra. ¿Qué vamos a hacer con estos dos valores que el usuario ingresó en los cuadros de texto? Bueno, lo que voy a hacer es, antes que nada, abro los usuarios hacen archivo Json como archivo, y conseguir que los usuarios lo carguen en un diccionario, así que los usuarios iguales a json dot load. Tenemos que ingresar a Jason aquí. Entonces JSON es una biblioteca. Y ahora, apenas como paso intermedio, vamos a imprimir a los usuarios para ver qué tenemos hasta ahora. Regístrate U uno, P uno, envía, y esto es lo que obtenemos. Entonces eso es lo que tenemos actualmente en el archivo JSON. Y esto en realidad es así que los usuarios es un diccionario Python. Ahora bien, lo que podemos hacerle a este diccionario es que podemos agregar otro valor. Entonces otro par de clave y valor, que es bastante fácil de hacer. Entonces, decimos usuarios. ¿Qué clave necesitamos agregar? Bueno, eso lo conseguimos de Name. Entonces vamos a agregar el nombre de usuario U one que ingresé como usuario. Entonces ahí vamos a tener un tercer nombre de usuario, y ese será su valor va a ser un diccionario. Así que igual que tenemos para el usuario uno, este diccionario, vamos a tener para U uno este diccionario también, y así nombre de usuario. Para Key, el nombre de usuario será, nuevamente, U Name. Y entonces la contraseña va a ser P palabra. P palabra. Entonces estamos aquí. P palabra, que va a obtener el valor P uno. Y entonces, como no tenemos mucho más espacio aquí, voy a poner una coma para continuar la expresión en una línea diferente Si sientes que una línea es demasiado larga, puedes dividir esa línea en varias líneas solo si la línea está dentro del paréntesis, como en el caso de una definición de función o corchetes, como en el caso de una lista o llaves, como en el caso de un diccionario En los tres casos, el código funcionará bien. No se puede dividir una línea que no tenga paréntesis, corchetes o llaves Si intentas hacer eso, vas a obtener un error de sintaxis a menos que uses una barra diagonal BC Una barra diagonal inversa permite dividir una expresión en múltiples líneas, incluso cuando esa expresión no está entre paréntesis, corchetes Dividir una expresión en múltiples líneas hace que el código sea más legible. Se recomienda dividir una expresión cuando haya alcanzado los 79 caracteres. No obstante, esto es sólo una recomendación. No tiene ningún efecto en el código. Entonces siguiente, ¿qué sigue? Bueno, creó la clave creada. Valor de eso va a ser fecha y hora que ahora, vamos a importar fecha y hora primero De fecha, hora, importación, fecha, hora. Entonces la clase diurna del módulo datetime. Entonces esta es la clase datetime que ingresé aquí. Punto diurno ahora, puedo mostrarte lo que estoy tratando de conseguir aquí. Entonces a partir de fecha, hora, importación, fecha , hora, punto diurno ahora, te daremos este objeto datetime Y lo que queremos de eso es que queremos extraer una cadena. Queremos obtener el aquí, el mes, el día, las horas, los minutos y los segundos. Entonces eso nos va a dar la fecha y hora en este formato de cadena. Entonces esto va a entrar aquí. Derecha. Y eso es todo. Ahora permítanme imprimir usuarios otra vez aquí abajo. Cierre esta ventana anterior, inscríbase U uno, P uno, envíe. Y se puede ver ahora que tenemos otro par de clave y valor. Entonces el nombre de usuario de UO con nombre de usuario UO contraseña P one y créelo en este mismo momento en el tiempo Entonces, ¿qué podemos hacer ahora con este nuevo diccionario? Bueno, nada elegante. Solo necesitamos abrir los usuarios punto JSON, pero esta vez en modo escritura como archivo, y accedemos a JSON el módulo JSON, volcamos el diccionario del usuario al archivo. Y eso es todo. Entonces, lo que estoy haciendo en este punto, estoy sobrescribiendo a los usuarios, los usuarios existentes que archivan JSON Entonces se va a crear un archivo completamente nuevo en este punto, archivo vacío. Y en este archivo vacío, voy a escribir el diccionario de nuevos usuarios, que será este de aquí. Por lo que el nuevo diccionario incluirá a los usuarios existentes, como viste aquí, el usuario uno y el usuario dos, y también agregará al usuario actual. Entonces espero que quede claro. Ya sabes, si probamos esto ahora, interrumpimos la sesión actual con Control C, ejecuta el código, regístrate, U uno, P uno, envíalo. Entonces presiono el botón enviar, ahora no pasa nada porque todo está pasando en segundo plano, por lo que el usuario tiene el archivo ha sido actualizado. Ahora bien, si miras a los usuarios ese archivo JSON, verás que actualmente hay un error con el código de Visual Studio que no sale para actualizar los archivos cuando se actualizan. Espero que esto sea resuelto pronto por los desarrolladores de código de Visual Studio. Este tema ha sido reportado. Pero de todos modos, lo que podemos hacer es que puedas ir al Explorador de Archivos en tu sistema operativo donde tienes estos archivos y puedes usar un editor de texto alternativo, como Not Pat. Tengo átomo aquí, edición de texto. Así que elige cualquiera de ellos, y verás que en el otro editor, los cambios se han registrado en el archivo JSON del usuario. Entonces se puede ver que U uno está ahí. Entonces usando un U uno, pase o P uno y la fecha en que se creó. Así es como agregas un nuevo usuario al archivo JSON. Y por último, lo que necesitamos agregar aquí porque ves que cuando presionas enviar y no pasa nada, no te das cuenta si te registraste correctamente como usuario o no. Entonces, en la otra conferencia, vamos a crear otra pantalla que se mostrará cuando el usuario presione un botón de enviar. Nos vemos. 185. Crear una página para el éxito del registro: Por lo que en este punto, podemos agregar usuarios a la base de datos escribiéndolos en estos cuadros de texto y presionando el botón de enviar. Ahora, vamos a mostrar otra página cuando el usuario presiona enviar. Bueno, podemos hacerlo de la misma manera que lo hicimos cuando cambiamos de la pantalla de inicio de sesión a la pantalla de registro. Entonces, la forma en que lo hicimos fue escribiendo en la función de registro de la clase de pantalla de inicio de sesión, escribimos este auto administrador actual igual a la pantalla de registro. Podemos hacer lo mismo aquí. Entonces, la función de usuario de anuncios es lo que se llama cuando el usuario presiona un botón de enviar. Así que podemos hacer auto gestor punto corriente igual a. Llamemos a esto el éxito de la pantalla de registro. Entonces esta va a ser otra pantalla que vamos a enumerar aquí, regístrate. Éxito de pantalla. El nombre de eso debería ser el mismo que usaste ahí dentro. Y claro, necesitamos crear esa pantalla. Regístrate pantalla éxito, una columna. Y lo que me gustaría que pareciera esta página es que me gustaría esta página tuviera una etiqueta donde diga, regístrate con éxito. Y entonces debería tener un botón debajo de esa etiqueta, que diría página de inicio de sesión. Para que el usuario pueda pulsar ese botón y volver a la página de inicio de sesión donde podrá iniciar sesión. Entonces, a la pantalla de inicio de sesión. Por lo tanto, antes que nada, necesitamos un diseño de cuadrícula. Solo necesitamos una columna, y luego necesitamos una etiqueta A. El texto de eso sería. Regístrate con éxito en los códigos, y luego necesitas un botón. El texto del botón sería página de inicio de sesión. Y dejémoslo así por ahora. Sólo voy a ejecutar todo para ver para qué tenemos esto. Entonces obtuvimos una excepción de fábrica de error. Por supuesto, no tenemos el éxito de la pantalla de registro. Así que necesitamos agregar un éxito de pantalla de registro de clase, que hereda de la pantalla, y pasemos ahí Ejecute de nuevo. La pantalla de nombre no está definida. Sí, hice un tipo aquí, pantalla Regístrate tres P tres, envía, regístrate con éxito, la etiqueta y la página de inicio de sesión, que no hace nada por ahora porque no tenemos un atributo de prensa para ese botón. Entonces, sí, para terminarlo, esto es lo que hicimos para implementar esta pantalla para cambiar a la siguiente pantalla. Entonces primero, agregamos una pantalla de autoadministrador en la función de usuario de anuncios. Eso cambiará la pantalla actual a esta pantalla de aquí. Y esta pantalla se ha definido aquí, y está representada por esta clase en Python. Y eso es todo. Entonces 12, tres, y cuatro puntos, tuvimos que sumar. Ahora, intenta como ejercicio implementar el botón de inicio de sesión. Entonces, cuando el usuario presiona el botón de inicio de sesión en la página, quieres registrarte, cuatro Pi cuatro. Cuando el usuario presiona login, vuelve a la página principal, así que a la página de inicio de sesión, que es esta de aquí. Intenta hacer eso. 186. Cambiar entre páginas: Así que permítanme implementar rápidamente el botón de la página de inicio de sesión. Derecha. El botón de la página de inicio de sesión está justo aquí. Así que en presione root dot, vaya a Iniciar sesión. Así es como llamo a la función. Y así estamos en la regla de éxito de la pantalla de registro, lo que significa que tenemos que ir a la clase de éxito de la pantalla de registro y definir ir a la función de inicio de sesión self y por supuesto, self, eso es manager, eso es actual, igual a la pantalla de inicio de sesión, que es esta de aquí. Entonces ya tenemos esa pantalla. Ya no tenemos que crear una nueva pantalla. Guarde el archivo QV y ejecute, inscríbase. Ux, P seis, no importa qué nombre de usuario y contraseña envíes. Regístrate correctamente que está etiquetada como página de inicio de sesión, y te lleva de vuelta a la pantalla de inicio de sesión. Ahora, algo a tener en cuenta es la dirección de la transición de las pantallas. Entonces actualmente, por defecto, la transición se llama izquierda. Entonces vas a registrarte. Entonces el movimiento es que la siguiente pantalla va hacia la izquierda. Entonces tu ocho pH. Ahora la siguiente pantalla irá así hacia la izquierda. Y cuando vayas a iniciar sesión, tal vez quieras ir a la derecha. Entonces, para cambiar la transición a la derecha, lo cual tiene más sentido. Entonces, si quieres hacer eso, ve a donde estés configurando la pantalla actual. Y así queremos cambiar la transición de la pantalla de inicio de sesión. Entonces, cuando establecemos la pantalla actual como login, queremos que esa transición del administrador esa dirección sea la correcta. Ejecuta eso, regístrate. Solo voy a enviar algunas cadenas vacías ahí solo para ser rápido con esto probando fuera de la interfaz. Entonces envía que es un nuevo usuario con cadenas vacías. No importa. Puedes poner algunas restricciones más adelante si quieres. Así que ve a la página de inicio de sesión. Y así esta vez, la siguiente pantalla viene de la izquierda hacia la derecha. Entonces, si eso es lo que quieres, lo cual creo que tiene algún sentido, entonces necesitas usar esta propiedad de transición de la propiedad del administrador, que tiene una propiedad de dirección y fijarla a la derecha. Esa es la idea. 187. Procesamiento de credenciales de inicio de sesión del usuario: Lo que hicimos hasta ahora con nuestro programa es construir la primera página donde el usuario puede iniciar sesión y también construimos la página de registro donde los nuevos usuarios pueden registrarse y ser miembros de nuestra base de datos JSON. En esta conferencia, vamos a implementar la funcionalidad de inicio de sesión. Déjame mostrarte cómo funciona la versión terminada del programa. No te voy a mostrar el código. Todavía no, solo cómo funcionará el inicio de sesión. Ignora la interfaz de aspecto agradable, o ahora lo haremos más tarde. Ahora tenemos que pensar en la funcionalidad. Entonces, cuando el usuario inicia sesión, ingresa los datos. Presionan login, y van a esta página interna del programa. Entonces aquí entonces tenemos un botón, que si pasamos el mouse, se volverá rojo, y si hacemos clic, nos va a cerrar la sesión y nos llevará de vuelta a la página de inicio de sesión Si el Delta está equivocado, dirá nombre de usuario o contraseña incorrectos. Entonces nuevamente, cuando los datos sean correctos , nos llevará a esta página. Entonces en esta conferencia, sigamos adelante y construyamos esta pantalla. Yo hice una captura de pantalla de eso, así que la tenemos aquí como referencia. Entonces necesitamos agregar una pantalla más en la lista de pantallas aquí. Vamos a nombrar la pantalla, Iniciar sesión de éxito de la pantalla. Y nombre vamos a estar en las mismas líneas, Login screen Success luego crea una regla para esa pantalla. Sólo voy a copiarlo y pegarlo. Y entonces, ¿qué tenemos aquí? Bueno, comenzamos con el diseño de la cuadrícula, que tiene una columna. Por ahora, sólo voy a proporcionar un botón sencillo. Posteriormente, implementaremos la funcionalidad que acabas de mostrar con esa animación. Cuando pones el mouse sobre el botón, el botón se pondrá rojo. Entonces, por ahora, solo usemos un simple botón. Con texto. Mire hacia fuera en la prensa. Así que vamos a tener que crear una clase de éxito de pantalla de inicio de sesión en el código Python y crear una función allí para cerrar la sesión del usuario. Así que mira hacia fuera. Sí, así es como me gustaría llamar a la función en la clase de éxito de pantalla de inicio de sesión que vamos a crear. Dejemos así el botón, y luego tenemos una etiqueta. ¿Cómo sientes que esa es la etiqueta? Texto Entonces le estamos preguntando al usuario cómo se siente para que pueda entrar en un sentimiento, y luego le damos algunas citas, dependiendo de cómo se sienta para que se sienta mejor o para potenciar su sentimiento. Las cotizaciones son algo bueno. La gente muy inteligente ha pensado bien en ellos, así que usémoslos. Vamos a hacer uso de ellos. Entrada de texto. ¿Con pista? Texto. Entonces aquí puedes escribir lo que quieras, pero me gustaría darles una pista para que sepan lo que pueden ingresar aquí. Entonces, sin tener que incluir ninguna descripción grande aquí en el cuerpo de la interfaz de la página, mantengamos limpia la interfaz, y hacemos uso de esta área aquí en el libro de texto Entonces cosas para probar. Feliz, triste, sin amor. Sí, eso debería estar bien. Y luego tenemos otro botón con texto Iluminame. Siéntase libre de usar cualquier nombre. Así de lejos va mi imaginación. Y ahora, en prensa, ¿qué vamos a hacer cuando el usuario presione ese botón? Bueno, cuando el usuario presiona ese botón, vamos a mostrar algún texto debajo del botón. Entonces, por lo tanto, necesitaremos una etiqueta. Y es texto por ahora es solo una cadena vacía. Entonces, vamos a incluir un atributo press para el botón más adelante. Por ahora, déjame seguir adelante y escribir una pantalla de inicio de sesión de clase exitosa, que hereda, por supuesto, de la pantalla y tiene un método Lo fuera. Lo hacia fuera para cerrar la sesión del usuario. Y aquí me gustaría primero, definir una dirección para la transición de esta pantalla. Vamos a ponerlo bien. El cierre de sesión se remonta a la página anterior, tiene sentido tener una dirección correcta para la transición Entonces claro, gerente, eso es actual igual a. ¿A dónde queremos llevar al usuario después del cierre de sesión? Queremos llevar al usuario a la pantalla de inicio de sesión. Otra vez, eso tiene algún sentido, ¿verdad? Entonces pantalla de inicio de sesión. Bien, entonces tenemos la página. Construimos la página de éxito de la pantalla de inicio de sesión de inicio de sesión, que era esta de aquí. Entonces déjame cerrar esto para tener más espacio para el código. Sin embargo, aún no hemos implementado la funcionalidad del botón de inicio de sesión. Entonces el inicio de sesión de u1p1 no funciona. Entonces localicemos el botón de inicio de sesión. Que se encuentra en la pantalla de inicio de sesión. Sí. La pantalla de inicio de sesión. Sí. Entonces eso es un botón botón iniciar sesión. Entonces, ¿qué queremos hacer en un evento de prensa? Bueno, queremos ejecutar una ruta que logre la función de inicio de sesión, que necesitamos tener en la clase de pantalla de inicio de sesión justo aquí. Entonces es básicamente la misma idea que el usuario de anuncios. Una función donde le dimos la función de usuario del anuncio, le proporcionamos el nombre de usuario y la contraseña. Entonces nuevamente, hacemos lo mismo con definir login. Yo y así aquí tenemos que dar dos argumentos. El primero sería roots, ese ID, ese nombre de usuario, ese texto. Y el segundo sería root ID punto contraseña punto texto. Entonces estamos hablando aquí, perdón por el tipo de aquí. Estamos hablando del nombre de usuario que el usuario ingresa en el cuadro de entrada de texto y la contraseña que el usuario ingresa en el cuadro de entrada de texto en la pantalla de inicio de sesión. Entonces root se refiere a la pantalla de inicio de sesión a la regla actual donde estás escribiendo el código aquí. Y no tenemos una identificación para la entrada de texto, así que sigamos adelante y hagamos ID, use el nombre, lo mismo para la contraseña. Y así entonces tomamos este nombre de usuario y contraseña en la función de inicio de sesión. Usemos Nombre y palabra P como parámetros. Puedes usar el nombre que quieras. También podrías usar nombre de usuario y contraseña. Entonces, ¿cómo iniciamos sesión en un usuario? Bueno, la idea es que necesitamos abrir para leer el archivo JSON donde tenemos los datos del usuario y verificar para ver si ese nombre de usuario y contraseña están en ese archivo. O más exactamente, si ese nombre de usuario está en el archivo y tiene una contraseña, la contraseña que el usuario está proporcionando en la interfaz gráfica de usuario. Si ese es el caso, entonces cambiamos la pantalla usando una propiedad manager dot current. Pasamos la pantalla a la pantalla que acabo de mostrarte que acabamos de construir y que aún no hemos visto cómo se ve. Así que permítanme implementar rápidamente esto con usuarios abiertos punto JSON tiene archivo. Entonces en modo lectura, cuando no definimos la R así, eso implica implícitamente que estamos leyendo el archivo Usuarios iguales a JSON que cargan. El expediente. Entonces eso nos dará un diccionario. Los usuarios serán el diccionario que contiene todos los datos en los usuarios que archivo JSON. Y luego si nombres en usuarios. Entonces lo que estamos haciendo aquí es, déjame mostrarte. Entonces necesitamos esta biblioteca JSON y los usuarios serán el diccionario, derecho. Hay muchos datos ahí. Y si decimos, por ejemplo, si 77 en usuarios, vamos a pasar porque U seven en realidad está entre las claves del diccionario. Entonces aquí, U siete, se puede ignorar al usuario. Son solo un prefijo para denotar que estos son datos Unicode, pero estas son las cadenas dentro de los códigos Entonces U seven está entre las claves del diccionario. También puedes obtener una lista clara de las claves. Con eso. Entonces los usuarios que se besan, ves que nosotros siete está entre esos datos. Entonces por eso nos hacemos realidad, y podemos hacer uso de eso y decir, yo nombre de usuario en los usuarios, yo nombre de usuario en los usuarios, así que primero comprobamos si el nombre de usuario está en la base de datos. Pero también necesitamos verificar y usuarios, tu nombre Contraseña igual a pWord así que esa es nuestra condición, en realidad Entonces lo primero es que el nombre de usuario tiene que existir. Y la segunda es que ya sabes, los usuarios, tu nombre, digamos, siete, así que los usuarios U siete es equivalente a esto. Entonces eso nos dará el diccionario que tiene la clave u siete. Esto es como el valor que tiene el ku siete. Entonces es un diccionario. Y si continuamos nuestra cadena de acceso, hacemos contraseña. Entonces estamos accediendo al valor de clave contraseña. Cada uno de estos diccionarios tiene esta contraseña como clave, y el valor de esa contraseña es la contraseña real. Entonces P siete en este caso. Por lo que estamos comprobando si la contraseña de ese usuario es una contraseña que el usuario está proporcionando aquí. Entonces contraseña ese texto entra aquí. Esto tiene que ser igual, no un operador de asignación. Entonces, si ese es el caso, entonces gerente sur esa corriente igual a la página de éxito de inicio de sesión, el éxito de la pantalla de inicio de sesión que creamos. Derecha. Y también necesitamos agregar un s condicional ahí, pero déjame intentar ver qué tenemos hasta ahora y depurar el código si tenemos algunos problemas. Entonces siete P siete inician sesión, y aquí hay una pantalla. Entonces este es un botón Cerrar sesión. ¿Cómo te sientes? El cuadro de texto que creamos Iluminarme, y esta es la zona donde se mostraría el texto Por ahora, no funciona porque no hemos adjuntado una función al botón Iluminarme Déjame probar ahora el botón Cerrar sesión. Entonces fuera no se define, como se puede ver aquí el error. Entonces nuestro botón de cierre de sesión que está aquí al presionar, está apuntando a que en realidad deberíamos escribir root, eso es Cerrar sesión Entonces está apuntando a la función de éxito de la pantalla de inicio de sesión Cerrar sesión. Entonces eso fue un problema. No especificamos la clase que tenía este botón de salida. Así que déjame intentarlo de nuevo. P siete inicio de sesión, Lou y estamos de vuelta a la página de inicio de sesión cuando hacemos logout. Y si ingresamos algunos datos equivocados, no pasará nada. Entonces esto es lo que vamos a hacer. Vamos a agregar una etiqueta justo debajo del botón de inicio de sesión entre estos dos botones y el botón de inicio de sesión. Entonces sigamos adelante y hagamos eso. Estamos hablando de la pantalla de inicio de sesión. Ese es el botón de inicio de sesión. Entonces agreguemos la etiqueta con texto , por ahora está vacía. Así que guarda ese cierre esa ventana, corre de nuevo. Ahora tenemos un espacio aquí. Entonces esa es una etiqueta. Y en esa etiqueta ahora, cuando los datos son correctos, vamos a la página de éxito de la pantalla de inicio de sesión s. así que ahora necesitamos acceder al ID de la etiqueta. Así que primero pongamos una identificación a la etiqueta, iniciemos sesión mal. Entonces aquí, ahora necesitamos acceder a esa etiqueta. La forma en que lo haces es usarte a ti mismo. Self apunta al objeto de pantalla de inicio de sesión. Entonces buscamos las identificaciones de uno mismo. Inicio de sesión, ID incorrecto. Entonces ese es el objeto label. Ahora necesitamos acceder al texto del objeto label y asignar el texto nombre de usuario o contraseña incorrectos. Así que asegúrate de guardar el archivo QV y ejecutar el código. Apenas algunos datos aleatorios que no están en la base de datos, Login y obtenemos la etiqueta ahí como esperábamos. Siete P siete, iniciar sesión, y vamos a la página de inicio de sesión. Entonces así es como accedes a elementos desde el archivo Ki. Entonces, cuando estés en el KIVfle, root apuntará a la clase asociada de esa regla Entonces pantalla de inicio de sesión, clase de pantalla de inicio de sesión, estos nombres tienen que ser los mismos. Y cuando estás en el archivo Python, self está apuntando a esa clase de pantalla de inicio de sesión de clase. Y dado que la pantalla de inicio de sesión aquí y la pantalla de inicio de sesión allí se comunican entre sí, obtienen y reciben datos. Eso significa que el objeto self conoce los ID y todos los widgets que contiene la pantalla de inicio de sesión. Entonces, por lo tanto, buscas el ID de inicio de sesión incorrecto para darte etiqueta este objeto de la pantalla de inicio de sesión, y luego accedes al texto. Entonces las selfies arraigan ahí, y eso es todo. Pasemos ahora a la siguiente conferencia y hagamos algunas cosas más interesantes sobre la interfaz. Agradécele 188. Mostrar la salida al usuario +: Para esta conferencia, me gustaría que acudieran a los recursos de esta conferencia y descargaran los tres archivos de texto. Después en el Explorador aquí en tu IDE, crea una nueva carpeta. Dale un nombre como comillas, y luego pon esos tres archivos en esa carpeta des. Puedes usar arrastrar y soltar si quieres. Por ejemplo, tengo estos archivos en alguna parte, y voy a simplemente arrastrarlos y soltarlos en esta carpeta. Entonces ves que ahora los archivos están en la carpeta de cotizaciones. Entonces lo que vamos a hacer en esta conferencia es en el programa que tenemos vamos a escribir uno de estos tres rellenos soportados por ahora Puedes agregar más archivos más adelante si tienes algunos datos. Pero esto es lo que tenemos hasta ahora. Y así cuando el usuario presiona el botón Iluminarme, queremos mostrar una de las citas que están dentro del archivo TXT feliz Entonces una de estas líneas. Algunos son largos, otros son más cortos. Y así si el usuario ingresa a SAD, entonces quieres mostrar aquí en esta zona una de las líneas del SAD, ese archivo TxD Esas son también nuestras citas. Y así se entiende la idea. Y si el usuario ingresa un relleno desconocido, como, digamos, emocionado. Y cuando presionan un botón, quieres mostrar prueba otro relleno porque no puedes tener todos los rellenos posibles ahí cubiertos Entonces esto es lo que vamos a hacer en esta conferencia. Punto principal pi. Entonces comencemos desde el botón. Intenta localizar el botón Iluminarme. O al menos así es como se llama mi botón. Entonces botón ese botón es parte de la página de éxito de la pantalla de inicio de sesión. Y aún no tenemos un atributo de prensa. Entonces en prensa, lo que quieres hacer es querer ejecutar un método de la clase de éxito de la pantalla de inicio de sesión, que lo tengo aquí mismo. Para que la pantalla de inicio de sesión sea exitosa, ya tiene un método, Cerrar sesión, que se ejecuta cuando se presiona este botón el botón Cerrar sesión. Ahora queremos implementar el método Gute. Código auto como de costumbre. Y así este método ahora tiene que comunicar el valor que el usuario ingresó en la entrada de texto. Entonces cual es la raíz que los ID puntean. No tenemos una identificación para la entrada de texto, así que pongamos una identificación. Entonces esta es una entrada de texto donde el usuario ingresó al relleno. Y así pongamos relleno ahí. IDs que llenando, queremos obtener el texto de esa entrada de texto. Entonces ese relleno irá aquí. Sólo llamémoslo llenar, no confundirnos con la palabra de relleno. Y lo primero que podríamos querer hacer es, veamos si estamos accediendo correctamente al texto de relleno. Así que imprime el relleno. Y asegúrate de guardar el diseño que el archivo KV ejecuta Login. Pude iniciar sesión porque tengo este nombre de usuario que creé anteriormente. Cuando me registré, creé un nombre de usuario que es una cadena vacía y una cadena vacía para la contraseña. Entonces básicamente, es un usuario con cadena vacía, cadena vacía como nombre de usuario y contraseña, que funciona porque no he puesto ninguna restricción en el nombre de usuario y contraseña. Entonces esto es solo por simplicidad cuando intentas cuando pruebas la aplicación. Feliz me ilumine, y así conseguimos los felices. Cadena ahí. Y si eso es con un gran ge, te vas a poner feliz. Lo primero que podríamos querer hacer es cambiar el campo a minúsculas Incluso si el usuario entra contento con una edad capital, vamos a convertir eso a todas minúsculas que podamos comparar ahora con los nombres en los archivos de texto con los nombres de archivo Veamos ahora qué sentimientos disponibles tenemos. Así que estoy asignando una variable sentimientos disponibles, y voy a usar el módulo globe para obtener una lista de nombres de archivo Esto es lo que me va a dar esto. Un error, claro, porque no importé glob. Entonces te da una lista con todos los archivos. Esto está disponible todos los rellenos disponibles. Estamos aquí en el método get quote. Ahora, la lista de rellenos disponibles ahora parece una lista de rutas de archivos Lo que quiero hacer es extraer todos los nombres de estos archivos, solo la parte del conjunto. Una forma de hacerlo es usando el objeto path de la biblioteca Path leap, no es necesario instalar esta biblioteca. Viene con Python. Es biblioteca estándar. Usando Path, si le das a path una ruta, como códigos, establece TXT y luego extrae el STEM de eso. Te daré el nombre del archivo sin la extensión sin la otra parte de la ruta. De hecho, tienes muchos métodos de path, y STEM es uno de ellos. Para que pueda obtener el sufijo, el nombre del archivo, incluyendo la extensión como esa y así sucesivamente Y entonces lo que podemos hacer aquí ahora es que necesitamos hacer uso de esa propiedad STEM, y necesitamos aplicarla a todos los nombres de archivo Para hacer eso, para que puedas usar la menor comprensión. Así que los sentimientos disponibles son iguales a camino. Digamos nombre de archivo para nombre de archivo en sentimientos disponibles. Y aquí me gustaría dividir la línea en múltiples líneas. Como esto está entre corchetes, se me permite dividir la línea. Y así queremos que se salga el tallo de eso. Entonces tal vez queramos probar una impresión aquí de los rellenos disponibles También asegúrate de importar de path lip Importar Ruta y luego ejecutar la app Y recibí un error cuando presioné el botón. El objeto String no tiene atributo STEM. Sí, claro, porque lo hice aquí. En lugar de poner STEM después del objeto path, lo puse justo al lado del nombre del archivo. Nombre de archivo es cadena. Entonces por eso obtienes STR no tiene STEM. Así que vamos a ponerlo aquí e intentarlo de nuevo. Iluminarme. Tan feliz set y Pan. Eso es lo que queremos. Ahora tenemos los sentimientos disponibles en una lista. ¿Qué puedo hacer ahora? Puedo decir que me siento en sentimientos disponibles. Entonces, si ese sentimiento está en los sentimientos disponibles, entonces lo que queremos hacer a continuación es que queremos abrir ese archivo que tiene esa sensación que tiene una cotización para ese sentimiento. Entonces usemos un abierto. Voy a usar el formato de cadena aquí. F. Así comillas, voy a abrir esta ruta de archivo, que tiene este relleno punto TXT un archivo. Entonces, ¿qué estoy haciendo aquí? Bueno, esa cosa, lo que me va a dar es, digamos que la sensación que el usuario ingresó fue feliz, ¿verdad? Entonces obtenemos esa variable. Tiene un valor. Y si conseguimos ahora esta cadena, nos va a dar es la ruta del archivo para ese relleno. Entonces esta expresión aquí en estas llaves va a ser reemplazada por el valor de esa variable de la variable de campo Entonces espero que quede claro. Y luego queremos obtener todos los des, todo ese archivo usando el método read lines. Entonces eso nos dará una lista de todos los códigos. Entonces déjame dessangrar e imprimir los códigos para ver para qué tenemos esto Contento, las citas fueron felices, y esta es una lista. Entonces como te dije, la felicidad es cuando haces lo que piensas y lo que dices, y así sucesivamente. Y luego lo contó Mahatma Gandhi, y luego tienes una coma, y ahí es donde empieza la Y así uno, tenemos una lista de múltiples cadenas, representando cada cadena una cita. Entonces, ¿qué podemos hacer ahora con esta cita? Hmm. Lo que podemos hacer es que podamos conseguir el yo que las ideas que. La idea de esta etiqueta donde queremos mostrar la cita, que está justo debajo del botón me iluminó Entonces la idea, cita, cita. Cita, ese texto. Entonces el texto de esa etiqueta será una elección aleatoria de la lista de cotizaciones. Entonces, lo que hace este método es Obtiene una lista como entrada. Entonces uno, dos, tres, y devuelve un elemento aleatorio de esa lista cada vez que lo ejecutes. Así que solo puro al azar. Entonces, por lo tanto, vamos a obtener una de estas cadenas, una de estas comillas, y esa cita se va a establecer como un texto de la etiqueta. Entonces así es como funciona. Y asegurémonos de importar al azar. Y estamos listos para ejecutar la app. Un inicio de sesión feliz Iluminame. Y nos llegó este error que es un error de atributos bastante común. Super no tiene atributo get atributo. Esto sucede cuando el archivo Python no encuentra ese ID, el ID de cotización en este caso. Entonces se puede ver que el error ocurrió en la línea 61. Entonces esa línea de ahí no está funcionando bien. Es decir, creo, porque no guardé el archivo QV ingresé cuando actualicé el ID de la etiqueta aquí Entonces escribí una identificación pero no guardé el archivo QV. Así que déjame intentarlo de nuevo. Estoy feliz de que estos errores surjan porque aprendes a solucionarlos. Iluminarme. Y sí, entonces tenemos la etiqueta que se muestra aquí. Cuando presionas de nuevo, esa función aleatoria de esa elección va a sacar otra opción aleatoria de la lista. A veces supongo que puede mostrar la misma cita, lo cual está bien, creo, pero hay formas de hacer que muestre una cita diferente a la anterior, pero esto está funcionando bastante bien, creo. Espere del caso cuando haya una cotización larga, y esté fuera de los bordes de la ventana de la aplicación. Entonces esto es un problema, pero nada de qué preocuparse porque vamos a implementar una vista scroll más adelante, que exprimirá esta etiqueta, y la hará flexible. Al cambiar el tamaño de la etiqueta dependiendo del widget en el tamaño de la aplicación. Por ahora, déjame cerrar eso y terminar el bloque Is, auto ese código de identificación, ese texto equivale a intentar otro relleno. Entonces déjame intentarlo una vez más, y terminamos con este video. Entonces eso está funcionando. Eso también está funcionando. Y me siento bonita. Oh, prueba con otro relleno. Eso no lo apoyamos. Y así es como hacemos una app. Eso escoge una cita al azar. Entonces la funcionalidad del programa está prácticamente hecha. Lo que queda por hacer es que necesitamos que sea un poco bonita la interfaz y los botones y los espacios entre los botones y añadir algo de animación. Entonces estas son cosas que te ayudarán a hacer algunas aplicaciones del mundo real, que son modernas y agradables de usar de los usuarios y que realmente puedes vender. Entonces hagámoslo en las próximas conferencias. 189. Estilizar la página de inicio de sesión: Ahora que la funcionalidad de la aplicación está funcionando bien, comenzaremos con el estilo. Entonces todos los botones están haciendo lo que se supone que deben hacer. Bueno, excepto el botón de contraseña olvidada, que se supone que es como un ejercicio para que lo resuelvas. Entonces ahora en el siguiente video, lo que vamos a hacer es que vamos a trabajar en el estilismo. Entonces este es un programa que construimos juntos esta f, y este es el producto estilizado final Entonces en este video en este mismo video, vamos a trabajar en la pantalla de inicio de sesión. De hecho, puedes redimensionarlos así para ver exactamente cómo se verán en un teléfono real porque ese es más o menos el tamaño de un teléfono, la relación de tamaño Así que vamos a cerrar estas dos interfaces, y voy a mantener esta interfaz abierta aquí para usarla como referencia. Entonces no estamos haciendo ningún trabajo en el archivo Python aquí en el archivo KV. Eso es sobre el diseño. Bien, así que lo primero que quieres agregar es algo de relleno y algo de espaciado en este diseño de cuadrícula. 15, voy a explicar lo que eso significa, claro, espaciado 2020. Entonces este diseño de cuadrícula, lo que es, es que tenemos el diseño de cuadrícula principal, que es todo el widget, y luego este diseño de cuadrícula tiene el inicio de sesión de usuario, etiquetar estas dos entradas de texto y este botón. Y también una etiqueta invisible aquí. Entonces queremos agregar algo de relleno, lo que significa 15 horizontalmente, lo que significa la distancia del diseño de cuadrícula de este diseño de cuadrícula a los bordes exteriores de la aplicación. Entonces ya ves que aquí tenemos unas 15 distancia, y también hay cierta distancia que no puedes ver, pero aquí hay un relleno verticalmente entre esta etiqueta y el marco principal. Entonces eso es relleno, el espacio exterior de esta disposición de cuadrícula. Y luego el espaciado es 2020 significa espaciado entre los widgets de estos diseños de cuadrícula. Entonces el espaciado es una cosa interna, y el relleno es externo. Se lo puede pensar así. Entonces 20 píxeles entre estos dos y 20 aquí también, entre este cuadro de texto y este botón Bueno, se puede ver que en realidad hay más espacio que 20 píxeles entre el botón y esta entrada de texto. Pero eso es porque también hemos aplicado en esta interfaz en este producto final. También he aplicado un poco de tamaño al botón en sí. Por lo que hay un relleno más la reducción de tamaño del botón. Por eso se ve más espacio aquí. Así que mantengámoslo así a salvo. Y luego necesitas ejecutar el archivo Python como siempre. Y así ahora tenemos algo de relleno y algo de espaciado entre estos widgets. ¿Qué tal aumentar el tamaño de fuente del usuario iniciar sesión en esta etiqueta? Entonces necesitas ir a la etiqueta y establecer el tamaño de fuente en 20. Tiene que ser una cadena como esta SP. Entonces ahora el tamaño del teléfono es más grande. Ahora, trabajemos en el tamaño del botón de inicio de sesión. Ves que esto se ve un poco demasiado amplio. Entonces, ¿qué tal hacerlo un poco más corto? Bueno, en QV, hay un atributo llamado sugerencia de tamaño, que se le puede dar a un widget, por ejemplo, a un botón de aquí Insinuación de tamaño. Ahora bien, la forma en que funciona QV es que por defecto, el área se divide proporcionalmente entre el widget, lo que significa que, por ejemplo, aquí tenemos el diseño de cuadrícula principal que ocupa todo el espacio porque es un diseño de cuadrícula Entonces es como un solo hijo, lo conseguirá todo. Entonces este diseño de cuadrícula tiene dos hijos. Tiene este diseño de cuadrícula aquí y tiene este diseño de cuadrícula aquí. Y el área entre estos dos niños se dividirá por igual. Y así este diseño de cuadrícula, el segundo tiene dos botones, el botón Olvidé contraseña y el botón de registro. Por lo tanto, puede ver que este diseño de cuadrícula aquí tiene la mitad del diseño de cuadrícula principal. Y el otro diseño de cuadrícula, que es el primer diseño de cuadrícula, tiene la otra mitad. Lo mismo ocurre con los hijos de cada uno de estos dos diseños de cuadrícula. Entonces los hijos del primer diseño de cuadrícula. La etiqueta y las entradas de texto, cada una de ellas nuevamente se les asignará el espacio que merecen. Entonces aquí teníamos una etiqueta, dos, tres, cuatro, y una etiqueta invisible, así que cinco widgets, y así cada widget tenemos el 20% de este espacio. Sin embargo, hay un atributo de sugerencia de tamaño que acabo de presentarte, que te permite cambiar cuánto obtiene un widget de su padre, así que sugerencia de tamaño. Entonces vamos a dar un valor de 0.3 y 0.5. Al botón de inicio de sesión. Lo que va a pasar es que el botón de inicio de sesión se apretará verticalmente. Ya ves, porque dimos un valor de 0.5. Por lo que tiene la mitad de la altura. Y también le dimos un valor de 0.3 para exprimirlo horizontalmente, pero eso no funciona porque aquí no hay otros widgets en el lateral. Entonces, de cualquier manera, el botón de inicio de sesión obtendrá, nuevamente, todo el espacio. No es dividir ningún espacio con otros widgets en esta dirección en la dirección horizontal. Para poder cambiar el botón, lo que tenemos que hacer en realidad es sangrarlo y convertirlo en el hijo de un widget de diseño relativo Si guardas eso y ejecutas, ahora verás que el botón ha cambiado de posición. En realidad tengo un 0.3, 30% de este espacio horizontal, como pueden ver, es un tercio. De este espacio horizontal, y también 0.5, 50% de la altura. Pero si haces este 0.5 menos que eso, si lo haces 0.1, por ejemplo, no vas a conseguir un botón con una altura muy, muy pequeña porque ahí hay una etiqueta que tiene un tamaño fijo. Y así lo mínimo que puedes obtener es la altura de la etiqueta para el botón. Ahora bien, ¿cómo podemos poner este botón en el centro? Necesitamos usar una pista de pausa, que obtiene un diccionario. Centro X 0.5. Y centro Y 0.6. Experimenté con algunos valores diferentes, y esto es lo que me pareció mejor Sin embargo, todavía no porque estos chicos de aquí, estos botones están ocupando demasiado espacio. Entonces lo que podemos hacer es ir al diseño de cuadrícula que tiene esos botones. Éste de aquí, y decimos tamaño. Pista, 0.20 0.2. Guarde eso y vea qué pasa. Hm. Entonces se ve mucho mejor así que pista de tamaño es bastante mágica porque te permite hacer que las tallas sean relativas. No quieres establecer un tamaño fijo porque hay diferentes tamaños en los dispositivos móviles, y es mejor mantener todo de tamaño relativo. Entonces lo que acabo de hacer aquí es que le di a este diseño de cuadrícula un 20% de espacio. Entonces 20% aquí, y esto aquí es 80% para el otro diseño de cuadrícula. Entonces el botón estaba apretando porque trató de hacer todo lo posible usando estos valores que cedí aquí para el botón, este botón de inicio de sesión, pero no pudo hacerlo porque este diseño de cuadrícula estaba ocupando demasiado espacio Por lo tanto, el 20% es bueno. Y si te gusta ahora, puedes dar algún relleno de diez y diez y espaciado de diez y cero. Este era el viejo. Esta es una nueva. Así que no está mal. Acabo de dar algo de espaciado entre los botones y algo de relleno relativo al exterior. Entonces el espacio horizontal, éste, y el espaciado vertical vertical. Y no hay otros botones verticales encima de esto, así que esto no tiene mucho sentido. Entonces cero está bien. Y déjame cerrar eso. Y por último, hagamos que esos dos botones se vean como enlaces. Entonces estas son la contraseña olvidada y regístrate. Cambiemos el color de fondo, que actualmente es gris a un formato RGB y opacidad Entonces Alpha para opacidad, y toma un valor 0-1 Por lo que los valores decimales. Se puede poner 0.1 y así sucesivamente. Pondré uno, uno, uno y cero. Cero significa que el color de fondo es completamente transparente. Voy a guardar eso y ejecutar. Ya puedes ver que olvidó la contraseña es así. Sin embargo, cuando hago clic en el botón, no parece estar haciendo nada como el botón de registro. Entonces lo que podemos hacer es jugar con la opacidad del texto Pongámoslo un valor de uno si el autoestado es normal, se 0.5. Entonces esa es una magia agradable que te voy a explicar cómo funciona. Verás, ya sabes, cuando hago clic en el botón, entiendo que estoy dando clic en el botón. Entonces lo que está pasando es que la opacidad es una. Si el estado de self self se refiere al widget actual que es botón. Así que recuerda root referido a la regla, que sería como pantalla de inicio de sesión aquí. Pero sí mismo se refirió a este mismo botón. Y si quieres acceder a una propiedad del diseño de cuadrícula, podrías hacer padre así. Entonces ese yo ese padre estaría apuntando al padre del botón, que es el diseño de cuadrícula. Pero no necesitamos eso ahora mismo, así que de lo contrario, si el estado no es normal, este es el estado normal de botón no se presiona. Hay otros estados como prensado liberado, pero este estado es normal. Y de lo contrario, si el estado no es normal, como este estado de aquí, he pulsado el botón. En ese caso, queremos darle un valor de 0.5 a la opacidad. Entonces todo esto de aquí es el código Python. Todo realmente en el lado derecho de estos atributos aquí, aquí, allá. Todo lo que hay es código Python. Y por último, cambiemos el color del fondo. Puedes usar un atributo de color para eso. Hagamos 0.1. Entonces eso significa 10% de rojo, 70% de verde, y 100% de azul con una transparencia de uno, por lo que no transparente. Guarde eso. Y voy a copiar estos tres atributos y darles también al otro botón, al botón de registro, guardar el archivo, ejecutar. Y si, esto es lo que quise hacer. Así que regístrate para obtener una contraseña. Lo presiono. Voy a la otra página, a la página de registro. Entonces nuevamente, esta es la interfaz que tenemos hasta ahora para los inicios de sesión Una última cosa que me gustaría agregar es que actualmente, cuando ingresamos un nombre de usuario, la contraseña es visible Queremos mostrar estrellas en lugar de eso. Así que ve a la entrada de texto para la contraseña y accede al atributo de contraseña y establecelo en true. Entonces cuando estableces ese atributo en true, lo que sucede es que la entrada de texto se trata como entrada de contraseña, por lo que no muestra la contraseña. Y gracias por seguir este video, e iremos a estilizar las otras páginas de la app en los próximos videos. Nos vemos. 190. Estilizar la página de registro: Hola. Lo que estás viendo es la página de alta. Aquí de este lado está el programa que hemos construido hasta ahora, y así es como debería quedar este programa después de este video. Así que sigamos adelante y agreguemos algo de relleno y algo espaciado a nuestra página de inicio de sesión. Esto es un código. Entonces estamos hablando de la pantalla de inscripciones. Creo que un relleno de 2020 y un espaciado de 2020 otra vez, debería estar bien. Así que déjame ejecutar apuntarte. Y entonces creo que está bien, pero si quieres, puedes jugar con este relleno y espaciado y tal vez con los otros atributos de sugerencia de tamaño que te mostré antes. Entonces, para darle sients al diseño de cuadrícula a este y luego a otros si insinúa a los cuadros de entrada de texto, depende de usted Creo que esto se ve bien de todos modos, para un tamaño de pantalla móvil. 191. Hacer que los botones sean interactivos: Hola, estoy muy emocionada de mostrarte ahora cómo estilizar la página principal de la app, que es la página donde pasará el usuario la mayor parte del tiempo Entonces la página donde llegan a estas cotizaciones. Y aquí a la izquierda es lo que tenemos hasta aquí cómo se ve nuestra página principal. Entonces esa es la página de éxito de la pantalla de inicio de sesión. Así es como lo llamamos. Y así se verá la página después de este par de videos. Entonces primero, lo que vamos a hacer es primero, vamos a agregar algo de relleno y algo de espaciado para tener estos botones separados unos de otros. Entonces eso es lo primero. Entonces lo segundo es que vamos a hacer que este botón grande se vea como este botón elegante de aquí, que cambia de color cuando colocamos el mouse, cuando colocamos el mouse encima del botón Y luego también vamos a agregar algo desplazamiento a esta área de etiqueta aquí para que todo el texto se muestre en un área pequeña, y el usuario sea capaz de desplazarse y ver el texto completo Así que sigamos adelante y trabajemos en un poco de relleno y espaciado, y luego en la parte inferior. Antes de comenzar, me gustaría que vayas a los recursos y descargues el archivo hoverbl dot py, el archivo Logout, hover dot PNG y el archivo PNG Logout not Voy a explicar en un poco lo que son. Entonces el relleno ahora, éxito de la pantalla de inicio de sesión Hmm. Vamos a agregar el relleno de 30, 30 y espaciado de 30, 30, también. A ver lo que obtenemos. Oh, sí, se ve mejor. Entonces ahora el botón, la biblioteca Kiv no tiene de forma nativa un objeto para implementar comportamientos de desplazamiento para que algo cambie al pasar el mouse, o no hay una manera fácil de hacerlo Pero alguien desarrolló un submódulo muy pequeño llamado hoverbl y puedes obtener ese archivo y ponerlo en el mismo directorio con tu archivo punto py principal Entonces están en la misma carpeta. Y entonces lo que haces es que no tienes que cambiar el archivo HoverBLTPI, así que sólo voy a cerrarlo Y entonces lo que podemos hacer es importar desde hoverbl, importamos el objeto de comportamiento hover Entonces esa es una clase, el comportamiento de la clase hover dentro del archivo hoverbel dot py Entonces eso es lo que vamos a usar. Y la forma en que vamos a usar eso es, bajemos por aquí. Y voy a crear una clase y llamarla botón de imagen. Entonces este será un botón especial. Ya no va a ser un simple botón, sino que va a ser un botón de imagen. Y este botón de imagen va a heredar de la clase de comportamiento hover y un par de otras clases también, que voy a importar aquí Entonces la forma en que vamos a implementar este botón es teniendo dos imágenes distintas. Creé estas imágenes en Power Points. Puedes crearlos fácilmente. Tienes estos símbolos. Y agregas algo de texto y luego haces que el fondo sea transparente. Y así tienes uno azul y otro rojo. Entonces los dos estados diferentes que quieres que tenga el botón, es una imagen PNG. Y entonces la idea es que este botón no tenga texto. Voy a tener una imagen. Por lo tanto, necesitamos importar de qv dot x dot image, import, image Y por último, desde qv dot importación de comportamientos UX. Comportamiento de los botones, y eso es todo. Ahora obtenemos el comportamiento de imagen y botón, y los colocamos como padres del botón de imagen. Objeto. Y todo lo que tenemos que hacer aquí es pasar. Es sólo una clase que reúne estos tres objetos. Para hacer una clase, así la clase de botón de imagen que tiene atributos que se comporta como estos tres objetos Entonces lo que hacemos entonces es ir al botón de imagen, y coloco esto mal aquí. Lo siento. Entonces esto debería estar aquí, en realidad, botón de imagen. Estamos hablando del botón de cierre de sesión, no del botón de iluminarme. Y ya no necesitamos ese texto de cierre de sesión. Entonces no necesitamos este texto de cierre de sesión porque estamos usando nuestra propia imagen que tiene el texto dentro Así que quita eso al presionar root Lookout. Sí, eso es correcto. Y fuente de este botón de imagen, va a ser Logout Hover I self dot Hovert Lookout, No, hover Oh, punto PNG, claro. Entonces ese es el camino de la imagen. Entonces Overt, este auto hovert lo que es, es este atributo de la clase de comportamiento Hort Entonces es una propiedad de bolos. Podría ser verdadero o falso. Entonces este es el código Python. Te dije que todo a la derecha de estos atributos es código Python. Entonces vamos a establecer una fuente la imagen de cierre de sesión hover para este botón de imagen Si esto es cierto si rondaba es cierto. Entonces el HoverlPifle está detectando si un mouse está De lo contrario, ponemos logout no hover. Entonces ese camino ahí. Entonces déjame ver qué está pasando. Sí, así que está funcionando bien tan fácil como eso. Pero el botón obviamente está ocupando demasiado espacio aquí. Entonces básicamente es tomar uno, dos, tres, cuatro, cinco, 20%, así que tenemos cinco widgets. Cada uno de ellos está recibiendo el 20% del espacio. Y entonces vamos a hacer algunas insinuaciones de tamaño entonces. Insinuación de tamaño. Creo que una buena cantidad sería como 0.35, 0.35 . Entonces vamos a ver. Sí, creo que esto es bueno. Y ahora esto está en el centro. Entonces, si quieres ponerlo a la derecha, quieres cambiar la posición. Y nuevamente, ahí está el atributo de pista de posición, que obtiene un diccionario, centro X. Creo que un buen número sería 0.93 y centro Y. 0.8. Ahora bien, si intentamos esto, ver lo que tenemos, no va a pasar nada. Debido a que el botón cuando usamos esta posición insinuando, el widget tiene que estar dentro otro widget llamado layout relativo Si guardas el archivo Kiwi ahora y ejecutas el archivo, eso hará la magia. Si presiono el botón , no funcionará. Y la razón por la que eso no funciona se esconde aquí en cómo ordenamos estos patrones de esta clase de botones de imagen. El comportamiento inferior debe ser el primero porque ese orden puede ocultar los métodos de ese comportamiento inferior. Ahora, déjame intentarlo de nuevo Cuidado. Entonces ahora funciona. Vuelve a iniciar sesión. se trata de esta implementación de botón de imagen. Y en la próxima conferencia, sigamos adelante e implementemos esta vista de desplazamiento aquí de la etiqueta. Ver aquí. 192. Crear un área desplazable: Hola, así que sigamos trabajando en la página principal de nuestra app. Y así el usuario ingresa algunos códigos. Y como saben, esta etiqueta aquí, la pantalla no está optimizada. Entonces lo que tenemos que hacer es, como ves, necesitamos envolver el texto dentro de los bordes de la app para que si el dispositivo donde se está ejecutando la aplicación sea así, el texto se mostrará normalmente como se muestra en este momento. Pero el móvil, si el dispositivo es teléfono móvil, se verá así. Y entonces quieres envolver el texto dentro esta área aquí para que el usuario pueda ver la cotización completa. Así que estamos en la página de éxito de la pantalla de inicio de sesión, y estamos hablando del atributo text size. Así que vamos a cambiar el tamaño del texto a auto punto ancho y auto punto alto. ¿Qué es el ancho de punto propio y qué es la altura de punto propio? Auto ancho de punto, auto se refiere al widget actual. Así que uno mismo es en realidad la etiqueta, y el ancho es el ancho de la etiqueta el alto es el alto de la etiqueta. Entonces el texto obtendrá el ancho y el alto de la etiqueta donde reside, lo que significa, déjame guardar el archivo Kiwi. Entonces cada widget aquí tiene un tamaño. Y así etiqueta es uno de los cinco widgets. Etiqueta, tienes botón, tienes entrada de texto, etiqueta, y tienes este diseño relativo, y la etiqueta está tomando 20% aquí. Es invisible, pero si tuviera un fondo como este botón, se vería como el tamaño de entrada de texto y este tamaño de botón. Entonces está en algún lugar de aquí. Entonces ese es el ancho, y ese es el alto, más o menos de la etiqueta. Entonces, si digo SD, intentemos conseguir una cotización larga. Entonces esto es lo que obtenemos ahora. Entonces se ve mejor. Si apretamos, verá que el texto está envolviendo dentro de la altura de la etiqueta y el ancho de la etiqueta. Entonces puedes ver que ahora cuando aprieto la ventana, la cambio de tamaño, la etiqueta se redimensiona dinámicamente, y también lo es el botón y la entrada de texto Y así el tamaño del texto también reflejará el tamaño de la etiqueta, como puedes ver aquí. Pero esto aún no es suficiente. Entonces, ¿qué tal darle al texto más área para que se estire verticalmente? Si quieres hacer eso, quieres establecer el tamaño del texto height en none. Entonces no quieres que esté relacionado con la etiqueta. Entonces, si guardas eso, prueba el código. Ya ves que la altura del texto es mayor que la altura de la etiqueta. La etiqueta está en alguna parte de aquí. Entonces déjame redimensionarlo otra vez. Entonces la altura de la etiqueta es así de alta, así que está en alguna parte de aquí, y la altura del texto es mayor que la altura de la etiqueta. Esto es mejor. Podemos ver el texto, pero obviamente el texto está superpuesto. Está encima de otros widgets, así que eso no es lo ideal todavía, claro. Entonces, ¿qué podemos hacer aquí? Bueno, lo que estoy pensando es, necesitamos encontrar la manera de cambiar la altura de la etiqueta para que coincida con la altura del texto. Entonces en este caso, eso sería como tener más de esta zona negra aquí de la etiqueta. Así que tener la etiqueta hasta aquí y tener los otros widgets apretados por encima de la etiqueta. Entonces cambiemos la altura de la etiqueta para que se ajuste a la altura del texto. ¿Cómo podemos hacer eso? Bueno, antes que nada, necesitamos la etiqueta Y. Entonces la altura de la etiqueta, necesitamos eso para ignorar la insinuación de talla, que significa, déjame mostrarte lo que eso significa Déjame probar otra cotización. Entonces, lo que eso significa es que la altura de la etiqueta, ya no es el 20% del diseño de la cuadrícula, pero tiene un tamaño fijo de 100 píxeles por defecto. Entonces, por defecto, la altura de la etiqueta ahora es de 100 píxeles. Y así es lo mismo que la altura 100. Si ejecuto esto ahora, vamos a obtener la misma salida exacta. Pero si cambias esto a 400, entonces la altura de la etiqueta, este es el atributo height de la etiqueta, no del texto. Entonces, si ves ahora, la etiqueta es bastante más grande. Digamos set. Entonces ahora que toma tiene mucho espacio. Entonces lo aprietas y puedes ver el texto. Pero esto no es lo que queremos. Dijimos que queremos que la altura sea dinámica. Queremos que la altura esté reflejando la altura del texto para que cuando tengamos la ventana estirada así, queremos que estos botones estén aquí abajo, y queremos que la etiqueta sea más pequeña. Entonces la forma de hacerlo es en lugar de tener un tamaño fijo para la altura, queremos auto ese tamaño de textura. Y obtenemos el segundo elemento de ese texto orcise tupla. Entonces el texto o el tamaño es una tupla que contiene dos elementos. El primer ítem es el ancho del texto. Entonces es un valor dinámico. Va a cambiar cuando cambies el tamaño de la ventana. Y así el primer valor es el ancho y el segundo es el alto. Entonces con este índice, accedemos al segundo elemento del derribo Si quisiéramos el primer elemento, usaríamos cero aquí. Queremos el segundo, que es la altura. Así que guarda eso Entonces, ves, ahora, la etiqueta es dinámica, por lo que está cambiando su tamaño dependiendo del tamaño del texto. Y podemos ver todo el texto. Y cuando estiramos así la ventana, aquí no tenemos ningún área en blanco excesiva, que sería el cuerpo de la etiqueta. No obstante, esto no es lo ideal, claro, y queda una cosa más lo que podemos hacer aquí. Lo que tenemos que hacer es tener algo de espacio para el widget de vista de desplazamiento. Y la etiqueta, junto con sus atributos, tengo que sangrarla con tabulador para tenerla como hijo de la vista scroll Entonces, la vista de desplazamiento ahora está al mismo nivel que el otro widget, entrada de texto del botón, la otra etiqueta, y así sucesivamente. Así que guarda ese Kivfle ahora, ejecuta. Feliz. Y así se puede ver un desplazador ahí Triste. Iluminarme. Entonces es trabajar con todo tipo de texto. Cuando el texto es corto, no hay desplazamiento, y cuando el texto es más largo, hay un desplazamiento automáticamente Para que puedas ir al final del texto. Y así es como se construye una vista de desplazamiento, que tiene una etiqueta y la etiqueta tiene algo de texto en su interior. Espero que lo hayas disfrutado, y te veré en el siguiente video. 193. Preparación del entorno para desplegar la aplicación móvil: Higen. En los siguientes videos, estoy muy contento de mostrarles cómo hacer un archivo APK a partir del archivo Python que ya tenemos que ya construimos en las conferencias anteriores. Ahora, un archivo APK es un archivo que se puede instalar en el teléfono Android para que la aplicación sea utilizable en el móvil. Actualmente, solo tenemos un archivo punto py. Entonces tenemos el archivo principal dot py y el archivo design dot KV. Y también tenemos un montón de archivos extra como este OverltPyfle y estos archivos PNG también, y la base de datos, que se almacena en el archivo dot Json del usuario Por lo que todos estos archivos serán agrupados en un solo archivo APK. Para poder hacer un archivo APK, necesitamos usar una biblioteca llamada Bildozer Es una biblioteca Python con la que podemos instalar. PIP o Conda El problema es que hacer archivos APK en sistemas operativos Windows o Mac, es muy difícil, por no decir imposible. Lo mejor que podemos hacer es usar un sistema operativo Linux como Ubuntu. Pero no voy a pedirte que borres tu sistema operativo Windows o tu macOS e instales un Linux en tu computadora. Ahora, vamos a utilizar una máquina Virtual, que es un software que puedes instalar en macOS o Windows. Y dentro de ese software, ese software se comportará como una computadora. Pero es una computadora virtual. Es un software. Entonces dentro de ese software, puedes instalar sistemas operativos como Linux, Windows o Mac. Entonces en esta conferencia, te voy a mostrar cómo instalar Virtual Box. Esta instalación es fácil tanto si estás en Windows como en macOS Así que solo tienes que ir a virtualbox.org. Y haz clic en el botón Descargar, luego haz clic en uno de los enlaces. Entonces, si estás en Windows, significa que el sistema operativo host es Windows. Por lo que Windows albergará el sistema Ubuntu Linux. Actualmente estoy en una máquina con Windows, así que voy a hacer clic en Hostos de Windows. Entonces eso me dará el archivo ejecutable de Virtual Box. Una vez que se descarga el archivo. Adelante y haz doble clic para instalar. No quiero un atajo en el escritorio o en la barra de inicio rápido, pero siéntete libre de dejar esas opciones como seleccionadas. Sí, necesitamos Internet en esa caja virtual en esa máquina virtual, computadora virtual. Así que instala. Iría por Instalar de nuevo. Finalizar y Oracle Virtual Box se lanzará ahora, espere que tarde un tiempo, y aquí está. Entonces la interfaz es bastante simple. Tenemos algunos botones aquí. Nos interesa el nuevo botón. Pero primero, antes de hacer eso, hay que ir a ubuntu.com Y descargar un sistema operativo Ubuntu. Así que ve al botón Descargar, ve al escritorio de Ubuntu. Ahora hay dos versiones, pero esta es una versión estable, la que tiene botón verde. Así que voy a descargarme eso. Espere que esto tarde un tiempo porque rondan los 2 gigabytes Sí, eso son bastantes datos. Una vez que descargue ese archivo, vaya de nuevo a Oracle Virtual Box y vaya a Nuevo. Nombre de pila, lo voy a llamar Ubuntu y verás que estas listas desplegables se actualizan automáticamente. Entonces quieres seleccionar Linux aquí. Estamos instalando un sistema operativo Linux y Ubuntu 64 bit. Eso es al menos lo que descargué de ubunto.com, pero tu sistema detectará automáticamente la arquitectura del programa Entonces voy a hacer clic en siguiente ahora, el tamaño de la memoria, dicen que el tamaño recomendado es de un gigabytes para RAM, pero yo diría que deberías ir por mayor, que es de al menos 4 gigabytes Si no tienes mucha RAM en tu computadora en tu computadora física, tal vez deberías ir por menos y ver cómo funcionará Ubuntu con tanta memoria. Pero esta es la idea. Esto es 3,000 megabytes es el tamaño de RAM en esta computadora con Windows que estoy usando, y le estoy dando 4 megabytes a la computadora virtual Linux Entonces ese sería el tamaño máximo 4 gigabytes de RAM para Linux. Haga clic en Siguiente. Crea un disco duro virtual ahora. Crear. Quieres un VDI, así que haz clic en siguiente. Dinámicamente asignado está bien. Esto de nuevo depende de ti. Te recomiendo 20 gigabytes si los tienes. Entonces alrededor de 20 gigabytes, pero dale al menos diez, o si no tienes mucho espacio en tu disco duro en tu computadora, entonces deberías optar por menos como 5 gigabytes y ver cómo funcionan las cosas Normalmente, si te quedas sin espacio o sin RAM, deberías obtener algunas ventanas pop up de una caja virtual diciéndote que el espacio no es suficiente, pero cuanto más espacio, mejor. Haga clic en Crear. Y así ahora hemos creado una capa aquí. Quieres ir a iniciar Y esto te pedirá que selecciones un disco de inicio. Entonces quieres ir a esta carpeta aquí y luego ubicar el archivo ISO que descargaste de ubuntu.com Entonces ese es uno ahí. Haga clic en Inicio. Ahora bien, esta ventana aquí es algo pequeña pero se puede ir a la máquina y a la configuración, ir a la pantalla. Y aquí en el factor de escala, es posible que desee aumentar esto al 300%. Haga clic en Bien. Y ahora ves que la pantalla es un poco más grande. Entonces esta es la siguiente pantalla que tenemos. Quieres ir a Instalar Ubuntu. Va para el inglés aquí y inglés allá para la distribución del teclado. Estos ajustes están bien. Entonces quieres seleccionar como disco e instalar Buntu que simplemente eliminará todos tus programas, tus fotos, y tu computadora, todo lo que hayas tenido alguna vez. Sólo estoy bromeando. Esto solo se trata de los programas que tienes dentro de la caja Virtual, que no tenemos ninguno. Entonces este sería el caso si estuvieras sobrescribiendo un sistema operativo existente que ya tenías dentro de esta caja virtual Entonces no tiene nada que ver con tus programas en tu sistema operativo principal, que sería Windows o macOS. Así que solo ve a Instalar Ahora. Continuar. Selecciona tu zona horaria. Seleccione un nombre para la computadora. Solo voy a ir para iniciar sesión automáticamente sin proporcionar una contraseña, sin embargo necesitas elegir una contraseña. Haga clic en Continuar. Y así eso tardará un tiempo hasta que se instalen los archivos. Entonces hasta que Ubuntu esté instalado en esta máquina virtual en este software de caja virtual. Mi instalación se completó y el prompt me está pidiendo que reinicie, así que voy a hacer clic en Reiniciar ahora. Eso reiniciará el sistema operativo Linux, no el sistema operativo host, que es Windows en mi caso. Así que solo reiniciando Ubuntu dentro de la caja virtual. Parece que hay un error, y acabo de presionar Enter y las cosas parecen estar funcionando. Entonces esto es Ubuntu. Si quieres ver la guía de inicio. Simplemente haga clic en siguiente. Y hecho. Ahora, es posible que desee ir a Oracle Virtual Box, entonces la interfaz de Virtual Box y luego ir a máquina y configuración y luego ir a General Avanzado. Y es posible que desee habilitar el portapapeles compartido y las opciones de gota de dragón Los configuré como bidireccionales, lo que significa que puedes copiar archivos desde el sistema operativo de tu host, así de Windows o Mac a Linux a Ubuntu y viceversa. No obstante, me he dado cuenta de que esto no funciona. Si obtienes este prompt, significa que hay algunas actualizaciones para Ubuntu. Pero sólo voy a cerrar esta ventana. Entonces asumiré que la opción de copiar y pegar archivos entre los sistemas no funciona Por eso te voy a mostrar lo que puedes hacer para obtener archivos de tu sistema operativo host a tu Linux a tu sistema operativo Ubuntu. Entonces esta es la carpeta donde tengo todos los archivos que necesito para este archivo APK para la versión móvil del programa. Entonces es todo lo que pasamos más este archivo Kv Build Dozer instalador punto SH Este es un archivo que puedes descargar de los recursos, y yo te voy a mostrar para qué sirve ese archivo. Pero por ahora, sólo voy a usar Dropbox. Entonces tengo los archivos del proyecto ya en mi Dropbox en Windows. Entonces la carpeta es esta de aquí. La docencia tiene todos los archivos. Muy bien, así que voy a hacer clic derecho y copiar el enlace de Dropbox. Entonces esto es en Windows. No está en Linux. Está fuera de Caja virtual. Otra forma de hacerlo sería utilizar este servicio, gofle dot IO Eso te permite subir un archivo, y eso te dará un enlace. Y para que ese enlace puedas usar puedes poner ese enlace dentro de Linux porque ahí hay un navegador. Tienes Firefox dentro de Linux. Pero como no podemos copiar y pegar, vamos a tener que escribir manualmente ese enlace. Entonces en mi caso, voy a usar Drawbox y voy a usarbtle.com para acortar la URL Entonces esa es la URL ahí. E ingresa esa URL en el navegador de tu sistema operativo Linux. Si no quieres pasar por este intercambio de archivos, solo puedes usar esta URL para obtener mis archivos y así poder descargarlos directamente desde tu sistema Linux usando el navegador. Ir a Descarga más directa. Guardar archivo. Bien. Los archivos ya deberían haber sido descargados y puedes encontrarlos en los archivos. Descargar. Derecha, da clic en el archivo Zip descargado. Ir a extraer dos. Desea seleccionar el escritorio. Pero da click en este nuevo icono de carpeta ahí, para crear una carpeta. Digamos Proyectar uno, crear y seleccionar. Entonces ahora vemos este proyecto una carpeta aquí, y ahí está la carpeta de enseñanza dentro, y estos son los archivos. Y así terminemos este video aquí. Así fue como instalar Visual box y cómo configurar Linux dentro de la Virtual box y cómo obtener los archivos dentro de ese sistema operativo Linux. Así que ahora estamos listos para crear un archivo ejecutable móvil que se ejecutará en Android. Entonces hagámoslo en el siguiente video. 194. Creación de un archivo APK para Android: Hola otra vez. En el video anterior, lo que te mostré fue cómo instalar Virtual Box, cómo instalar Ubuntu dentro de Virtual Box, y luego transportamos los archivos del proyecto a este sistema operativo Ubuntu. Ahora están en el sistema de archivos dentro de Ubuntu. Lo que vamos a hacer ahora es que vamos a utilizar la biblioteca Bill Dozer Python para crear un archivo APK Pero antes de hacer eso, necesitamos instalar algunas dependencias en el sistema operativo Ubuntu porque Bulldoser las necesita para poder crear este archivo móvil APK Para ello, mientras se encuentre en la carpeta donde están los archivos del proyecto, haga clic derecho y vaya a abrir a la terminal. Entonces eso abrirá el terminal Linux. Verás este directorio actual. Entonces ahí es donde están tus archivos. Si haces LS, verás que estos son los archivos. Entonces el punto principal pi está ahí. Asegúrese de que esto se llame exactamente punto pi principal porque Bill Dozer necesita ver ese archivo Y ese archivo debería tener el programa principal. No necesito este archivo de captura de pantalla, así que solo voy a quitar eso como puedes ver, el archivo de captura de pantalla ya no está ahí. Para ubicar las ventanas abiertas en Ubuntu, vaya a actividades, y verá que el terminal está abierto y el explorador de archivos también está abierto también. Haga clic en la terminal. Eso traerá de vuelta la ventana de la terminal. Ahora, entre esos archivos, ve este instalador de Bulldozer Kiv Puedes ver el contenido de ese archivo usando CAT y escribir el nombre del archivo. Entonces esto es lo que ese archivo tiene dentro. Básicamente, estas son instrucciones instalar muchas dependencias, entre ellas Python, Belser y Kiwi, porque este sistema Linux tampoco tiene Kiwi Así que baja aquí. Estamos nuevamente aquí, haga clic en Bash, presione la tecla tab para completar automáticamente el nombre Entonces ese es el nombre del archivo SH. Haga clic en Entrar. Ingresa la contraseña de tu sistema Ubuntu. Esta es una contraseña que creaste cuando estabas instalando Ubuntu. Ubuntu te pidió un nombre de usuario y una contraseña y espera que esto tarde un tiempo. Ubuntu ahora está descargando estos paquetes de Internet e Internet se habilitó automáticamente cuando instalas Ubuntu, así que no tuve que hacer ninguna configuración manual de la conexión a Internet. A veces recibirás algunas advertencias, pero puedes ignorarlas. Este no es un proceso estable porque hay muchas dependencias involucradas y a veces obtendrás algunos errores cuando creamos ese archivo APK para que ese archivo no se cree a veces No es un proceso fácil, pero puedes leer los errores, lo que están diciendo y tal vez buscar en Google para ver qué están hablando otros sobre ese error en particular. No hay garantía de que funcione. Dicho esto, Linux es el mejor sistema operativo para poder crear estos paquetes APK. Por último, la instalación ha terminado mi computadora en mi computadora virtual Linux. El siguiente paso es opcional. Es posible que quieras probar la aplicación que tienes. Para ello, usa Python, el comando Python three, Minda's Pi, que es el archivo que hemos estado usando La aplicación funciona bien con Python. Vamos a probarlo. Sí, está funcionando bien. Así que cierra esa ventana. Y lo siguiente que queremos hacer es crear un archivo de especificación Bull Dozer Para ello, usamos BullDozer, por lo que el comando BullDozer en él Bien, eso creó este archivo de especificaciones de puntos de Bilozer. Puede minimizar esta ventana y encontrar ese archivo en el sistema de archivos. Puede ignorar este archivo. No necesitamos esto. Eran solo algunas notas que estaba usando. Entonces bulloser dot spec, puedes hacer doble clic en él y se abrirá con la aplicación de editor de texto Entonces aquí, lo que tenemos aquí es que podemos cambiar algunos parámetros de la app que vamos a crear. Pongamos el título, ¿cómo te sientes? Puedes elegir un nombre para el paquete, pero no uses espacios ahí. Sólo voy a dejarla mi app. Y quieres parar aquí, ¿qué extensiones quieres que incluya el paquete? Entonces tenemos archivos Pi. tenemos algunos archivos PNG, y también tenemos archivos JSON. Entonces esto es lo que queremos que se incluya. archivo KV, pero ya está ahí. Entonces KV ya está ahí, y luego ir más abajo. Entonces esta va a ser la versión 0.1. Es nuestro primer despliegue, y luego quiere detenerse aquí. Entonces, ¿qué requisito tiene su paquete? Bueno, veamos qué bibliotecas. ¿Qué bibliotecas de terceros tenemos en nuestro archivo pi principal? Entonces tenemos el archivo QV. Hoerbl es un archivo local. No es una biblioteca de terceros. Este archivo local está incluido en el archivo del proyecto, por lo que no hay que declararlo en los requisitos, y eso es todo lo que tenemos. JSON y Globe son bibliotecas estándar de Python, por lo que también vienen con Python random, y también Path leap. Entonces en el archivo Builders Dot Spec, no tenemos que agregar nada más que Python tres y KV. Baja aquí, quieres habilitar todas las orientaciones, no solo retratos en el móvil Eso está bien. Y esta versión aquí debería cambiarse a ocho. Y eso es todo. Asegúrese de guardar el archivo, haga clic en Guardar o Control S, cierre y luego vuelva a la ventana del terminal. Y ahora lo que queda por hacer es que queremos ejecutar el comando que creará, ojalá, el archivo APK. Es decir, construir Saucer Android, depurar, En algún momento que te preguntaremos si quieres aceptar la licencia para aceptar la licencia, presiona Y y luego entra Eso inicialmente falló en mi sistema. Entonces, si ese es el caso, tal vez quieras volver atrás y mirar el error porque estos son solo mensajes genéricos. Quieres localizar después de estos colores, quieres ubicar aquí la parte superior del mensaje rojo. Ese comando falló. Creo que eso es porque especificamos la versión ocho. Intentemos ir al archivo de golpes o spec y cambiar ese eliminar ese valor y reemplazarlo con brazo 64 V eTA, pegarlo ahí dentro. Y además de esto, también nos olvidamos, creo que olvidamos agregar la extensión dot TXT entre las extensiones aceptadas aquí. Dot TXT porque dot TXT es el archivo donde tenemos esas cotizaciones. Así que asegúrate de guardar esto, ciérralo y vuelve a ir a la terminal. Esta vez, vamos a intentar de nuevo construir el archivo APK usando Bulldozer Pero esta vez vamos a agregar la bandera limpia. Y luego depurar. Por lo que la bandera limpia se asegurará de no meterse con los esfuerzos anteriores de intentar construir el paquete APK. Presentador, nuevamente, vamos a tener que esperar un tiempo para que se complete el proceso de empaque Pero esta vez, no se le va a pedir que acepte la licencia, y el proceso podría ser más rápido que antes. Entonces esperemos un poco. Entonces los esfuerzos del segundo construido se completaron en mi Linux, vaya a la carpeta. Ben se ha creado la carpeta. Entonces dentro de eso, deberías poder encontrar el archivo APK. Eso es sobre este video. En el siguiente video, voy a conseguir un dispositivo Android, y voy a mostrarte cómo instalar ese archivo APK en el dispositivo Android. Nos vemos. 195. Instalación del archivo APK en Android: Entonces, el siguiente paso es obtener este archivo APK, ponerlo en un dispositivo Android e instalarlo para que podamos jugar con la aplicación en el dispositivo móvil real. Ahora, puedes ser creativo aquí cómo transferir este archivo a tu dispositivo móvil. Sería más fácil si este sistema Linux estuviera instalado en su computadora física, no en una caja virtual. Entonces en la vida real, si quieres tomarte las cosas en serio haciendo aplicaciones móviles con Python, es posible que quieras instalar Ubuntu en tu computadora para tener una computadora Linux. Podrías hacer esto con arranque dual, si tienes un portátil o PC con Windows, y en ese caso, podrías conectar tu teléfono móvil con un cable USB para poder colocar fácilmente los archivos en tu dispositivo móvil. En este caso, quiero tener una solución general que funcione para todos. Así que voy a subir este archivo en este servicio go file dot IO. Entonces haz clic ahí y ve a Bin. Ese es el expediente. Subir. Y ahora puedes obtener ese enlace aquí, el enlace de descarga, y puedes ponerlo en el navegador de tu dispositivo móvil. Hola. Entonces déjame mostrarte ahora cómo instalar el archivo APG en un Dispositivo Android Entonces esa es la página web go file dot IO donde subí el archivo APK para poder compartirlo en mi dispositivo móvil. Esa es una de las formas. Entonces mi navegador está apuntando a ese servicio. Voy a ir a descargar. Presiona el botón de descarga. Entonces dice descargando. Cuando se descargue el archivo APK, te preguntará si quieres instalarlo. Y así presiona en Instalar. Android te está preguntando si quieres instalar esta aplicación o no porque normalmente no quieres instalar aplicaciones de las que no sabes de dónde vinieron por razones de seguridad Entonces esta app, construimos esta app, así que queremos ir a Instalar de todos modos. Tengo instalada la aplicación de mensajes. Si quieres enviar la app para escanearla a Google, no quiero hacer eso. Así que no envíes. Así que presiona Listo y sigue adelante y localiza la aplicación. Entonces aquí está la aplicación. Voy a darle click. Se está cargando. Y dos U uno, P uno, iniciar sesión. Feliz. Da click en Iluminarme y verás que se están mostrando los mensajes Entonces está funcionando. Espero que esto funcione bien para ti. Espero que disfrutes el proceso. Si el Build no fue exitoso en tu caso, por favor mira las preguntas frecuentes para ver si tu pregunta es respondida ahí, y puedes intentar hacer el proceso de compilación nuevamente con Bildoser Android Siempre usa la opción clean, y así te veré en los próximos videos. 196. Raspado web con Python y Beautiful Soup: Hola, y bienvenidos a esta interesante sección. Vas a aprender raspado web con Python en esta sección En esta conferencia, quise explicar lo que significa el raspado web Por lo tanto, el raspado web significa desechar la web para obtener información, o en otras palabras, extraer información de las páginas web Digamos que quieres extraer información sobre bienes raíces. Tal vez quieras conocer la tendencia del precio lo largo del tiempo y el lugar. Y no creo que existan algunos buenos archivos Excel con datos bien estructurados que puedas seguir adelante y descargar y hacer análisis de datos sobre eso de inmediato. En realidad, dichos datos se distribuyen páginas web HML de sitios web de bienes raíces En nuestro ejemplo. Así que vas a tener que desecharlos y ponerlos en un formato estructurado en un formato bien estructurado como archivo Excel y Excel, CSV, Pandas DataFrames u Y poner eso en un formato bien estructurado se conoce como desguace web, y Python es excelente en eso Específicamente, vamos a usar una biblioteca Python llamada Beautiful Soup. Entonces en esta sección, te voy a presentar Beautiful Soup, y vamos a extraer algo de información de una sencilla página web mientras te muestro lo hermosa que funciona la sopa. Luego en la siguiente sección, así que una vez que consumamos las conferencias de esta sección, seguiremos adelante y extraeremos alguna información inmobiliaria como direcciones de propiedad y precio de la propiedad, la zona, y otras características de las propiedades. Vamos a extraer esa información de un gran sitio web inmobiliario. Entonces, sí, eso es lo que es raspar. Sí, hablaré contigo en la próxima conferencia. 197. Cómo funciona el raspado web +: Entonces, ¿cómo funciona el desguace web de todos modos? ¿Cómo es capaz Python de obtener la información de una página web y almacenarla como texto para que puedas analizarla a tu conveniencia? Bueno, este texto que ves aquí. Entonces este es un sitio web de ejemplo, y en realidad este dominio está reservado para ejemplos. Pero es una página web normal construida con HTML y CSS y otras herramientas de desarrollo web. Entonces HTML es lo que renderiza los elementos, el texto y todo. En el navegador. Ahora, por suerte, se puede ver el código de cada página web yendo a ver la fuente de la página como lo hice aquí. Entonces este es el código, el código HTML, como lo ves, se abre aquí con etiquetas HML, y se cierra aquí Y así esto tiene título de la página web, que es ésta de aquí, dominio de ejemplo, y así sucesivamente. Y lo más importante, para que sepas es que el script SML está hecho de elementos SDML Entonces esta línea de aquí es un elemento SML, entonces es un meta elemento, y luego tenemos elementos de división, que es este de aquí Tenemos elementos de párrafo este año. Y a estos se les llama etiquetas. Entonces la etiqueta Div y la etiqueta de cierre de división. Entonces apertura de etiqueta de división, etiqueta de división. Y luego tenemos la etiqueta del cuerpo. Entonces aquí es donde se coloca la parte visible de la página HML de la página web Entonces todo lo que coloques dentro de las etiquetas del cuerpo, verás ahí. Entonces si tienes ejemplo, dominio aquí, este dominio se establece para ser usado, etcétera, aquí es donde ves ese texto Este dominio se establece para ser utilizado para, etcétera. Y así los elementos HTML son clave para el raspado web. Entonces básicamente, lo que haces es eso, digamos que quieres extraer el texto de las etiquetas de edad uno de todos los DIF todas las divisiones. Entonces, lo que le dices a Python que haga es decirle a Python que vaya a todas las etiquetas de la edad uno y extraiga el texto de estas etiquetas. Python va a hacer eso. Pero antes que nada, sin embargo, necesitas cargar todo este script en Python, y la forma de hacerlo es usando la biblioteca de solicitudes. Por lo que las solicitudes te permiten dar URL de Python, así como example.com, y Python agarrará todos los textos Entonces, una vez que tengas este texto, usarás la hermosa biblioteca de jabón para extraer todos los elementos del texto. Entonces, por ejemplo, el examen, el texto dentro de HD h one tags. Y luego puedes almacenar el texto extraído en variables en diccionarios Python o marcos de datos Pandas, y donde sea que lo encuentres útil para tus necesidades Entonces ese es el concepto y puedes ver el mismo código fuente, como ya sabrás, desde la inspección. Así que haz clic derecho a Inspeccionar y verás esto. Entonces aquí está como este código fuente, pero lo ves más organizado. Entonces, por ejemplo, si estás pasando el mouse sobre las etiquetas del cuerpo, el elemento correspondiente en la página web se resaltará tal y como lo veas Entonces, si expandes esto, ahora estás en el borde en las etiquetas y así sucesivamente. Entonces esto te permite ver realmente los nombres del impuesto para los elementos que quieres extraer. Entonces usaremos la ventana de inspección para comprender el código fuente de nuestras páginas web Entonces eso es sobre el concepto de desguace web. Y te veré en la siguiente conferencia, donde cargaré una página web en Python, y luego extraeremos algunos datos simples de la página web. Así que solo para comenzar con solicitar biblioteca y la hermosa biblioteca de jabón también. Entonces, sigamos adelante. 198. Ejemplo de raspado web con Python: Entonces, como ves, es bastante simple. E intencionalmente, traté de encontrar una página web sencilla para ti. Así que aquí vamos. No quería distraerte con mucho contenido por ahora Más tarde, podrás obtener información de un sitio web grande con muchos datos. Entonces por ahora vamos a tratar de agarrar. Digamos que queremos extraer los nombres de las ciudades de esta página. Entonces, si quieres seguir MIP, por favor escribe esta dirección en tu barra de direcciones con dot HTML al final Y así tenemos aquí sólo tres ciudades que vamos a estar extrayendo. Pero el código que vamos a escribir funcionará con cualquier número de filas aquí. Estaré usando el cuaderno iPython o el cuaderno Jupiter como se le llama ahora, por lo que pasó a llamarse Así que a la derecha, haz clic y abre tu línea de comandos. Libro Nodo JPTer. Y voy a crear un libro electrónico gratuito de Python. Genial. Entonces lo primero que quieres hacer es que quieres cargar este código fuente en Python. La forma de hacerlo es mediante el uso de la biblioteca de solicitudes. Entonces, si no tienes eso instalado, puedes simplemente seguir adelante e instalarlo con PIP o solicitudes así como así Ya la tengo, así que ya satisfecha. Pero el proceso es muy sencillo, así que ya sabes cómo instalar paquetes con PIP Y también necesitas la hermosa biblioteca de sopas. Entonces para instalar eso, hay que decir PIP instalar de nuevo y no hermosa sopa, sino Bs por lo que significa hermoso jabón cuatro Entonces esa es la última versión de hermoso jabón. Y luego. Entonces quieres importar solicitudes, y así lo primero que quieres hacer es cargar el código fuente. Y luego empezamos a buscar etiquetas HDML y a extraer elementos de esas etiquetas Pero déjenme importar hermoso jabón también. Entonces de BC BC cuatro, importar. Hermosa sopa. Entonces esa es la sintaxis. Estás importando la hermosa clase de sopa de BC four. Si estás en Python dos, esto debería ser ligeramente diferente. Entonces quieres importar hermoso jabón directamente así. Bien, Alt Entrar y pasar a la siguiente línea. Así que para cargar una página web. Es bueno crear una variable, que puedas cargar el código fuente de la página web a esta variable. Así igual a peticiones punto Obtener así el método G. Entonces apuntas a la biblioteca y luego al método Get. Y todo lo que necesitas para pasar aquí es la URL de la página web que quieres cargar. Entonces en este caso, pythonhw.com. Ejemplo dot HTML. Así que no olvides el HTML. Esta es solo una página web estática, por lo que debes pasar el ICML ahí Ahora bien, esto debería crear un objeto request. Así que todavía no estamos ahí. Y lo que quieres hacer es tomar el contenido de este tipo de datos de solicitud y tal vez almacenarlo en otra variable. Entonces el contenido almacenado en una variable C así. Y si quieres comprobar ahora, lo que esto ve, verás que se trata de un tipo de datos byte. Y puedes imprimirlo si quieres. A pesar de que esto no se ve muy bien, este es en realidad el código fuente que ves aquí. Entonces tenemos la etiqueta head y las etiquetas HTML y todo lo demás ahí. Y ahora, aquí es donde entra en juego la hermosa sopa. Entonces todo lo que hace la petición es que carga el código fuente de la página web, pero en una forma muy revuelta como ves aquí Ahora bien, si quieres hacer esto hermoso y extraer los elementos y el texto y todo fuera de este código fuente, quieres usar un hermoso jabón. Entonces todo lo que hace la sopa hermosa es analizar este código fuente y darte lo que quieres Así que dándote los elementos del texto HTML que te interesan. Entonces ya has cargado este contenido, y ahora lo que quieres hacer es quizá crear una variable y llamarla sopa. Y eso sería igual a la hermosa sopa y adivina qué quieres pasar aquí. Bueno, ese sería el contenido. Y tal vez otro argumento. Por lo tanto, desea especificar el analizador que desea utilizar para analizar estos datos Ese es normalmente el analizador HDML. Entonces esto es lo que quieres usar casi siempre. Si no especificas esto, recibirás una advertencia, pero aún así las cosas funcionarán. Así que normalmente lo paso ahí. Y una vez que hayas hecho eso, así ejecuta esa L. Si sabes, imprime sopa prettify con corchetes vacíos ahí Verás el código fuente de la página web de forma organizada. Tan hermoso jabón está entrenado para reconocer realmente estas etiquetas y luego renderizarlas de manera visual para el ojo humano. No obstante, esto es sólo para demostración. Normalmente, no tendrás que usar mucho el método pretty phi porque un mejor método para ver este código, como ya mencioné antes, es dejarme borrar la celda. No necesitamos eso. Entonces una mejor manera de ver ese código fuente es ir a tu página web e ir a inspeccionar y aquí ves una mejor sintaxis del código HML Entonces aquí lo verás. Aquí tenemos tres divisiones. Con una clase de ciudades. Aquí tenemos algunas divisiones más, pero esto es lo que nos interesa. Entonces el cuerpo lo es todo. Y si expandes una de estas divisiones, verás que tenemos una etiqueta H dos, entonces una etiqueta de encabezado, y también una etiqueta de párrafo. Entonces etiqueta P y H dos etiquetas. Y también la otra división, que es esta de aquí, tiene esta etiqueta H dos y la etiqueta de párrafo. Y Tokio también tiene lo mismo. Entonces nuestro deber ahora es extraer los nombres de estos elementos. Entonces ese sería el H dos, el texto de las etiquetas H dos dentro de las etiquetas de la ciudad. Entonces, naturalmente, empiezas a pensar en iterar a través de estas cajas que en realidad son divisiones Entonces quieres pasar por aquí, aquí y aquí y extraer lo que quieres extraer. Entonces volvemos al código, y lo que quieres hacer es realizar un método llamado find A. Y lo que quieres encontrar es Divs Devs, pero puede haber muchos divs en la página web Entonces, por ejemplo, tenemos dos divs más aquí. Y no queremos que estos se encuentren. Nosotros sólo queremos a estos tres. Pero estos tres, como ves, tienen un atributo de clase común que es igual a las ciudades. Entonces queremos hacer uso de eso. Y pasamos aquí un diccionario, que sería la clase igual a las ciudades. Bien, déjame crear una variable aquí, llamarla a toda y ejecutarla. Ahora bien, si imprimes todo verás que las divisiones han sido extraídas del código fuente. Entonces de la sopa, que era todo el código fuente. Y me gustaría que realmente lo vieran de cerca aquí. Se puede ver que la primera división está dividida por coma aquí Y luego comienza la segunda división. Entonces para París, París es el segundo y termina aquí y luego Tokio comienza aquí. Entonces tenemos una lista con tres elementos, uno para cada división. Ahora bien, si quieres encontrar solo el primer elemento con este atributo class, self cities, querrás usar el método find. Y así en este caso, no obtienes una lista, sino que obtienes la división de código solo para la primera división, que pasa a ser Un elemento de etiqueta de hermosa sopa. Entonces no es una cuerda simple, sino que es una especial, digamos, una hermosa cadena de jabón especial. Para que ese hermoso jabón conozca su estructura, así sabe qué elementos o dónde están las etiquetas y dónde está el texto y así sucesivamente. Para que esa hermosa sopa sea capaz de darte la información que buscas. Así que de nuevo, así se extrae el primer elemento. Ahora bien, una forma alternativa extraer el primer elemento es lógicamente, así que tenemos todos los elementos aquí es usar la indexación de listas Entonces este objeto que acabo de mostrarte, el objeto tecnológico de la sopa hermosa apoya la indexación. Entonces ejecutas eso. Y en este caso, como ves, extraes el primer elemento del objeto tag, o podrías hacerlo así, así los agarras todos. Entonces aquí los tienes todos, y cero es el primero. Entiendes la idea. Bien, pero ¿y si quieres solo la H a las etiquetas de esta clase D? Bueno, en ese caso, lo que querrías hacer es hacer referencia al objeto y luego aplicar de nuevo el método fine. Y esta vez, querrías obtener el elemento H dos. Y en este caso, no tienes un atributo de clase, así que tendrás que dejarlo así. Y se obtiene un error porque lo que hice aquí es que no señalé a esta división, pero en realidad señalé la lista. Conteniendo todas estas divisiones. Python está tratando de obtener el H dos, pero este método de conjunto de resultados no tiene este elemento H two. Entonces lo que quieres hacer es querer apuntar al primer elemento de la lista, y eso te da el elemento H dos con el texto y el texto, que es como una lista, por lo que quieres realizar una indexación cero ahí Y si solo quieres Londres, aplicas texto y obtienes Londres. Entonces esto es lo que queríamos, ¿verdad? Para extraer las ciudades. Así que extraemos Londres. Ahora bien, ¿qué tal extraer París y Tokio? Bueno, como puedes adivinar, necesitamos usar cuatro bucles. Pero primero, permítanme resumir lo que hicimos aquí. Entonces cargamos el contenido aquí arriba, que es este de aquí, y luego cargamos este contenido en el método de la sopa hermosa. Y hermosa sopa hace que esta sopa hermosa para que reconozca las etiquetas. Y entonces lo que hicimos entonces es que encontramos, extraemos de este contenido. Se extrajeron todos los elementos de división. Así que junto con las etiquetas y los atributos y el texto dentro de ellos. Todo dentro de estas divisiones con una clase equivale a ciudades. Entonces podemos realizar para cada uno de estos elementos de esta lista, podemos realizar, nuevamente, un método de encontrar todo. Por lo que podemos encontrar sub impuesto de esta división etiquetas. Y en este caso, encontramos la etiqueta H. Y luego agarramos el primer ítem de la lista, que en este caso pasó a ser una lista con un solo ítem. Entonces cada una de estas divisiones tiene una H para gravar. O alternativamente, solo podrías usar find here y sin usar esta indexación. Pero este es un método general. Después aplicamos ahí el atributo text para extraer el texto de este elemento. Así que conseguimos Londres. Ahora, tenemos que hacer lo mismo, pero en este caso, iterando Entonces para, digamos ítem en O, quieres imprimir. Entonces el artículo aquí es este de aquí. Entonces este sería el primer ítem. Entonces quieres imprimir el artículo que encuentra pull. Y quieres encontrar las etiquetas H dos de este primer ítem, por ejemplo. Entonces H dos etiquetas, y luego necesitas aplicar este índice cero ahí dentro, y quieres tomar el texto de esto, y eso es todo. Aquí están los datos. Alternativamente, podrías simplemente pasar P aquí y obtienes los párrafos. Entonces éste está aquí, el texto. Entonces esa es la idea de cargar páginas web en Python y procesarlas con un hermoso jabón y extraer textos de la página web Lo siento mucho si fui un poco repetitivo al explicar estas cosas, pero realmente quiero asegurarme de que entiendas los conceptos centrales Por otro lado, si te pareció esto muy básico yo diría, pasemos a las siguientes conferencias donde estaremos extrayendo alguna información de un sitio web más avanzado, y estaremos extrayendo enlaces y no solo texto. Entonces ese es un programa del mundo real y uno muy interesante. Entonces te hablaré más tarde. 199. Aplicación 8: demostración de la aplicación de web scraping ++: Hola, bienvenidos a esta nueva sección. Y, como es habitual aquí en la primera conferencia, solo te voy a dar una demostración del programa que vas a construir. Y, así tendrás este programa en tus manos al final de esta sección. Y sí, durante mi trabajo como freelancer, he visto un aumento en la demanda de obtener datos de Internet de varios clientes, y estos datos pueden servir para diferentes propósitos. Por ejemplo, es posible que necesite datos de propiedad de sitios web de bienes raíces como este de aquí, o puede necesitar negocios, así que lista de negocios, y es posible que desee buscarlos en páginas amarillas o incluso información de Wikipedia. El problema es que estos sitios web no te dan como un CSV con los datos que estás buscando. Entonces no hacen eso. Y lo que quieres hacer en ese caso es quieres desechar datos de estos sitios web. Y sí, es posible que necesites datos para diferentes propósitos. Y podemos hacer eso. Podemos hacer desguace web. Entonces el proceso se llama Webscrapping. Eso lo podemos hacer con Python. Entonces Python es perfecto para eso. Básicamente, lo que haces es obtener estos datos y los almacenas en una tabla, como un marco de datos Pampas aquí, y también puedes exportar con esa facilidad en salida Sí, en esta sección lo que vas a hacer es que vas a hacer desguace web en esta página web de bienes raíces Entonces con Python, vas a realizar una consulta de búsqueda en una ubicación determinada. Entonces Python buscará datos, y luego obtendrá esos datos, y los almacenará en esta tabla y luego por último, diré luego en un archivo CSV de comida. Entonces todo es automático. Y es posible que desee obtener diferentes atributos del sitio web. Entonces en nuestro caso, obtuvimos este conjunto de atributos. Y sí, puedes obtener esos datos en una sola ronda de programa. Pero claro, antes que nada, hay que construir ese programa, y eso es lo que vamos a hacer en las próximas conferencias. Entonces esto es muy útil. Y además de aprender el desguace web, esto también impulsará tus habilidades en Python en general Y sí, vamos a empezar esto, y hablaré contigo en la próxima conferencia. 200. Cargar la página web en Python: Ahí, me alegro si estás viendo esto, es genial que hayas llegado hasta aquí en el curso. Y en esta conferencia, en realidad, a lo largo de las siguientes conferencias, aprendes a desechar datos de este sitio web. Entonces este es un sitio web de bienes raíces, y lo que hace, enumera propiedades en venta o en renta. Entonces básicamente, digamos manantiales de roca. En realidad hay algunos manantiales de roca ahí, así que digamos Wyoming Rock Springs en Wyoming Así que estamos buscando algunas propiedades ahí. A en Wyoming y dice que encontró 28 anuncios Entonces es una ciudad bastante pequeña, un pueblo pequeño. Entonces la idea es que aprendas a desechar datos de cada una de estas propiedades. Entonces lo que puede tener un precio es que tienes la dirección ahí y el número de apuestas que tiene la propiedad y baños y así sucesivamente. Y también obtienes los pies cuadrados de las propiedades. Si eso está disponible. Entonces las propiedades no tienen eso así que tenemos que contar para eso, también. Y además, eliminas datos de varias páginas. Así que tenemos diez propiedades aquí en esta primera página. Y luego en la página siguiente, tenemos otros diez, y luego en la tercera última página, tenemos el resto, que deberían ser ocho, así que 28 en total. No, normalmente, supongo que conoces las peticiones y las hermosas librerías de telenovelas. Entonces deberías haber tomado las conferencias anteriores donde sacamos datos de una sencilla página web, así que ese fue un ejemplo trivial Y creo que después de ese ejemplo, terminas con eso, ¿y ahora qué? Entonces, por esa razón, me gustaría que aprendieras a desechar algunos datos reales. Entonces este es uno de los programas reales que estamos construyendo en este curso. Y en el guión que estamos a punto de escribir, allí te enfrentarás a algunos problemas reales de programación, lo cual es muy importante para desarrollar tus habilidades, tus habilidades en Python. Sólo un problema. Antes de desechar datos de un sitio web, es bueno leer las políticas de datos de ese sitio web Por lo que pueden tener algunas políticas contra el uso o la obtención de sus datos. Estoy usando esto con fines educativos, así que creo que vas a estar haciendo lo mismo. Entonces eso no debería ser un problema. Así que vamos a seguir adelante y escribirlo programa. Y voy a estar usando el Cuaderno Júpiter. Te sugiero que hagas lo mismo. Por lo que esto creará un archivo de cuaderno de Júpiter. Entonces estoy usando Python tres. Llama a esto Century 21. Genial. Entonces ahora sabes que lo primero que quieres hacer al momento de escribir un programa, tal vez Importa las bibliotecas que vas a estar usando. Entonces estarás usando solicitudes y hermoso jabón. Así que de By four Import. Genial. Ahora, vaya a la siguiente línea. Y volvamos a la página web. Entonces ahora, lo primero que quizás quieras pensar es, ¿cómo cargamos el código fuente de las páginas web? Y ahora, en realidad, esto es un poco complicado. O sea, no muy complicado, pero es diferente de la página web estática que desechamos en las conferencias anteriores Entonces aquí tenemos vamos a estar desguazando tres páginas, como dije, y lo bueno es que cada una de estas páginas tiene una URL única Entonces así cuando estás en la página principal aquí, ves que la URL es simplemente simple. Pero entonces cuando busques lugar, así que mira la URL ahora cuando busco, la URL cambiará. Entonces fue a bienes raíces Rock Springs y Wyoming. Entonces esta es la cuerda, así que para el lugar que buscas, Rock Springs y WY y también tienes algo más aquí que debes estar al tanto. Entonces la idea es que ahora obtengas esta URL. Entonces primero, solo estaremos desguazando la primera página. Y una vez que agarramos eso, entonces pensamos en las páginas siguientes. Entonces porque las siguientes páginas son las mismas, entonces la estructura es la misma, pero solo estaremos escribiendo un bucle para iterar a través de las siguientes páginas Así que sigamos adelante y descarguemos la primera página. Digamos punto de solicitud obtener aquí está la URL. Y queremos que el contenido de este objeto de solicitud. Entonces ese contenido. Y vamos a imprimirlo. Entonces una simple prueba ahí. Mm hmm. Mm hmm. Bien, entonces mi conexión a Internet está funcionando. Eso es todo lo que sabemos de este código porque no podemos leerlo. Entonces lo que queremos hacer es ir a la siguiente venta y hacer que ese código sea más legible. Entonces necesitamos usar el hermoso suplibrar aquí. C y el analizador, que es HTML Parser Y tal vez sopa para imprimir. B bastante cinco. Bueno, vamos a ver. Entonces esta es la página. A veces es posible que te echen de la página web, por lo que es posible que quieras asegurarte de que la página se haya cargado correctamente. Así que a lo mejor podría ir aquí y buscar algo. Entonces Winchester, buscaré a Winchester. Sí, así que la página parece haberse cargado correctamente. Y ahí no necesitamos el prettify. Así que déjame limpiar el cuaderno ahí. Así que pudimos cargar la página correctamente con las solicitudes. Y ahora ¿qué sigue? Bueno, lo siguiente es que necesitamos entender la estructura de la página web. Entonces necesitamos usar la herramienta de inspección en nuestro navegador, y lo haremos en la próxima conferencia. Así que mira. 201. Extraer elementos Div: Genial. Entonces vayamos a nuestra página. Entonces hemos buscado resortes de trabajo ahí. Y lo que queremos hacer ahora es entender la estructura de la página web. Por lo que ahí utilizamos la herramienta Inspeccionar. Y la lógica es que se quiere iterar a través de todas estas cajas, por así decirlo Entonces agarramos el HTML de estas cajas, y luego entramos en esos HTML. Así que iteramos a través de esos HTMLs. Y luego encontramos las etiquetas para los datos que queremos obtener. Entonces eso nos lleva al punto que deberíamos estar buscando los elementos que identifiquen estas cajas. Entonces si voy a inspeccionar aquí de nuevo, veré que esta media caja tiene este div con este ID. Y en realidad, quiero un nivel superior, así que quiero toda la caja ahí. Entonces si voy aquí, ahora, esto se parece a toda la caja aquí. Entonces el interior de aquí deberían ser los datos. Esta es la imagen. Y este es el precio. Entonces, aquí hay un texto para el precio, y tenemos este precio de prop como una clase para la etiqueta H four, que crea este número aquí. Entonces esta es la primera división div. Y entonces deberíamos tener el siguiente div en algún lugar ahí, aquí. Entonces fila de propiedad, fila de propiedad aquí, propiedad, fila de propiedad otra vez. Entonces la fila de propiedad de clase y otra vez aquí. Y déjeme poner esto aquí abajo. Entonces atraparlo en la parte inferior para que podamos ver toda la caja ahí. Bien, así. Entonces aquí vamos. Entonces lo que me gustaría desechar y guardarlos en un archivo CSV o archivo Excel con pandas más adelante es que voy a obtener el precio, la dirección, el número de camas, el número de baños, el área de la propiedad, y también el tamaño del lote si hay mucho Entonces algunas propiedades no tienen carga ahí. Entonces tenemos un truco ahí, y vas a aprender a descifrar eso. Y entonces estos son los datos que voy a sacar de cada propiedad. Y déjame volver a poner esto aquí arriba. Y puedes o bien hacer click aquí e inspeccionar, así va directamente a los elementos, así al precio o ir manualmente, cual probablemente sea mejor porque te ayuda a entender mejor el sitio web, la estructura de la página web. Entonces esto es un precio, y luego aquí abajo, aquí dentro de aquí deberían estar los elementos de dirección, detalles primarios. Estas son las apuestas. Entonces, si ampliamos esto, verás que aquí está el texto para la dirección. Entonces tiene un lapso de con este nombre de clase. Y este de aquí es el nombre del pueblo y el código para el estado y el código postal también. Genial. Pero antes que nada, como dije, necesito pasar por esta clase de fila de propiedad de la Div. Entonces hagámoslo aquí. Y sabes que tienes un método llamado final, que aplica al objeto sopa. Entonces final, y esto generará una lista con todos los elementos dif que tienen una clase de ¿ era fila Property? Sí, es fila de propiedades. Fila de propiedad con R mayúscula, eso es todo. Entonces entraré, ejecutaré eso. Y entonces, ¿qué puedes hacer? Bueno, todo imprímalo y tal vez vea lo que obtienes. Por lo que comienza desde el comienzo de la primera división de fila de propiedades. Entonces ese sería el primer precio, que era este de aquí arriba, aquí. Entonces debería haber una coma aquí después de que termine la primera división Pero de todos modos, si no quieres encontrarlos manualmente, puedes hacer algo. Puedes encontrar la longitud de todo este objeto que es como una lista, no es exactamente una lista. En realidad, es es un elemento de conjunto de resultados de la B four de la hermosa biblioteca de sopas, pero tiene una función de longitud al igual que la lista dos. Entonces longitud, y obtienes diez. Y tenemos exactamente diez resultados por cada página. Entonces primera página aquí, segunda página diez resultados y así sucesivamente. Ahora bien, esto es como una lista, así que no tiene un método fino, sino que son elementos. Entonces digamos el primer elemento, este elemento tiene un método final. Entonces al igual que haces con una sopa hermosa, así aplicas el método, un método final, una sopa hermosa para encontrar elementos de etiquetas, puedes hacer lo mismo para los elementos de la lista A. Por así decirlo, llamemos lista al conjunto de resultados. Y eso significa que puedes aplicar un método fino a este código fuente. Entonces busquemos el precio. Bueno, puedes ir a la inspección o simplemente mirar por aquí si eso es, esto no es mucho código. Entonces encontré el precio aquí. Entonces tenemos las etiquetas H cuatro, H cuatro. Y también tiene un precio de propiedad una clase de precio. Así que pasemos eso. Puedes optar por no pasar eso. Pero el problema con el que te puedes encontrar si no pasas el nombre de la clase es que si tienes otras etiquetas H cuatro en el código, Python las extraerá también. Por lo que es necesario especificar qué H cuatro desea. Entonces prop precio ahí, encuentra, y aquí está el precio. Entonces esto es un precio, pero con las etiquetas también. Y esto es en realidad una lista, como ves. Ahora, debido a que solo tenemos un precio por cada propiedad, en este caso, se nos permite utilizar el método find. Entonces eso nos daría no resultados al menos sino el elemento tecnológico real. Eso significa que ahora podemos aplicar un objeto de texto aquí, y obtenemos esa cadena funky allí Entonces las cosas no son tan simples en la vida real, como ves, pero afortunadamente, todo este objeto es en realidad Una cadena. Entonces es una cadena simple de Python. Eso significa que puedes aplicar métodos de cadena a ese objeto. Entonces déjame controlar eso para eliminar el tipo. Entonces en este caso, lo que queremos aplicar es que queremos eliminar todos estos caracteres. Y una manera de hacer eso que pienso es reemplazar. Entonces quieres reemplazar la diagonal N por nada. Así que solo pasa ahí una cadena vacía y mira lo que obtienes. Bien, estos chicos de este sitio web del siglo 21 han decidido hacernos la vida difícil. Pero, ¿qué tal aplicar? Entonces tenemos algo de espacio ahí espacio en blanco, como ves, así que reemplazamos el espacio en blanco por nada, y obtenemos la cadena real. Genial. Entonces, como que sabemos que las cosas están funcionando bien en este momento. Y por ahora, sólo estoy imprimiendo los resultados. Entonces, como ya mencioné, es bueno usar primero declaraciones print cuando estás construyendo tus programas, y luego reemplazas esas declaraciones print con otras funciones que quieras usar para estos datos que estás obteniendo u otros objetos con los que estés trabajando. Entonces en nuestro ejemplo aquí, más adelante, estaremos agregando algunos métodos pandas para agarrar estos valores y enviarlos al archivo CSE Entonces esa es una de las primeras cosas que me gustaría decir. Lo segundo es que aquí ahora agarramos el valor del primer elemento. Y ahora empezamos a pensar en ser eficientes. Entonces necesitamos en lugar de ir y extraer todos los demás elementos como la dirección de propiedad y el estado de propiedad y así sucesivamente. Tal vez sea bueno comenzar a construir nuestro bucle for. Entonces ahora sabemos que los valores individuales se están extrayendo correctamente. Pero ahora queremos asegurarnos de que un bucle que itera a través de todas estas propiedades también esté funcionando Y sigamos adelante y comencemos a escribir el bucle en la otra conferencia. Pero por ahora, en realidad organicemos este código. Entonces aquí hay un truco que puedes usar en Júpiter. Entonces voy a la primera celda y estoy en modo comando. Entonces presionas Escape para ir al modo de comando y Shift y J, seleccionas la otra celda. J, otra vez, selecciona la otra celda, o puedes subir con K, entonces J, J. Y lo que quiero hacer ahora es que quiero fusionar todas estas celdas en una sola celda. Y para hacer eso con la prensa de mayúsculas, presionas, entonces Mayús M, y obtienes todas las celdas fusionadas en una sola celda. Entonces esto es más un tema de preferencia, pero es bueno tener un cuaderno limpio ahí. Entonces esto es lo que hicimos hasta ahora. Sigamos adelante y corramos el bucle en otra conferencia. Nos vemos. 202. Raspar las direcciones de las propiedades: Así que tenemos toda la sopa de la página web, que en realidad es el código fuente. Y también obtuvimos el código fuente de las divisiones con fila de propiedad de clase. Y ahora pudimos agarrar el precio de la propiedad solo por la primera división. Así que por sólo el primer cuadro aquí, ahora para obtener todas las cajas, necesitamos iterar. Entonces DD para borrar eso. Y cuatro, digamos, artículo en aleación. Y en realidad, me gustaría mantener el todo impreso aquí para que veas lo que es todo. Entonces, si te olvidas de eso por un momento, eres capaz de ver de qué se trata. Entonces es como una lista. Así que para el artículo en todo ve aquí. Entonces vamos a estar usando el método de impresión aquí. Pero me gustaría escribirlo al final porque no quiero agregar corchetes ahora ahí. Entonces es bueno tener menos corchetes por ahora para que veas este código más claro, el código real. Entonces estamos pasando por el primer ítem, que es esta división aquí, y queremos aplicar el método find a ese ítem o simplemente el método find porque tenemos aquí solo una H cuatro. Así que encuentra, y queremos encontrar el H four, que tiene una clase de precio de utilería. Y entonces lo que queremos obtener de este producto es el texto. Y viste que el texto estaba un poco desordenado ahí, así que queremos reemplazar los extremos de la barras inversas por nada, y luego otro Entonces había espacio, y reemplazarlo por nada. Entonces es la misma línea que aquí. Y luego quieres imprimir esto. Entonces agrega una declaración de impresión ahí. Y si, eso es todo. Veamos cómo va esto. Hmm. Eso fue rápido. Entonces 725, 452. Yum. Eso es bueno. Bien. Déjame borrar esto para ahorrar algo de espacio. Entonces ya tenemos todos definidos aquí. Entonces no necesitamos agregarlo aquí. Y vamos ahora a extraer esta puerta de enlace cero no se ve muy buen ejemplo. Entonces, ignoremos eso y extrayamos aquí esta dirección. Entonces Winchester Boulevard, y eso sería inspeccionar Mm hmm. Entonces eso tiene una etiqueta span con una clase de colapso de dirección prop. Pero se puede ver que también tiene otra clase aquí, colapso de dirección de utilería. Entonces dos clases, esta es la dirección, y este es el nombre del pueblo. Y mira si tienes otra dirección prop colapsa no. No, nosotros no. Así que la dirección de prop colapso. Agreguemos otra declaración aquí. Artículo. Entonces esas direcciones están nuevamente dentro de este método. Así que el artículo encuentra. Ahora bien, si usas bien esta vez en lugar de Fine Ole, lo que hará el guión es que agarrará la primera aparición de colapso de dirección de prop. Por lo que te dará la dirección de Winchester Boulevard, e ignorará la segunda Por lo que ignorará a Rock Springs. Entonces eso significa que necesitamos usar bien O. Y si quieres obtener esta primera línea, querrás pasar el índice cero a esta lista de conjuntos de resultados luego un índice de uno para la siguiente línea. Entonces vamos a hacer eso. Esa fue una etiqueta span con una clase de otra vez, colapso de dirección prop. Entonces déjame imprimir esto para ver qué tenemos hasta aquí. Entonces, aquí está el precio de la primera propiedad, y luego agarramos la lista de conjuntos de resultados aquí, que en realidad tiene dos elementos. Entonces la dirección aquí, y luego el nombre del pueblo con un código estatal aquí y código postal. Entonces eso significa que tenemos que aplicar aquí índice cero, si quieres obtener el primero, ¿de acuerdo? Y luego Uh, vamos a ver. Entonces aquí está el primero, el primer elemento. Si quieres el segundo, quieres copiarlo en pases aquí y pasar uno aquí. Ejecutar. Y aquí vamos. Ah, supongo que quieres el texto, así que quieres aplicar el método de texto ahí. Hm. Genial. Y solo por el bien de la visibilidad, agreguemos otra línea al final del bucle para pasar una cadena vacía. Entonces ahora se pueden ver los bloques más claros, y ahí tenemos diez cuadras. Bastante increíble, ¿no? Así que vamos ahora a extraer el número de camas y el número de baños. Entonces esa es una etiqueta span con una cama de información de clase. Y baños. Aquí está el otro vaso de giro. Si valor baño completo. Ahora, aquí tenemos un problema. No, hay que tener cuidado aquí porque tenemos que agarrar el número de baños aquí, que está dentro de las etiquetas B. Pero el número de baños también está dentro de las etiquetas B. Para que puedas seguir adelante y aplicar un método fino directamente en este nivel. Entonces directamente debajo de O. Pero eso probablemente causaría algunos problemas porque ahí tienes múltiples Bs. Y así también tienes el área, que también debería ser un poco etiqueta. Clase Span. Sí, es un poco de etiqueta. Entonces a veces tienes tres etiquetas B, a veces tienes más. Entonces ahí puede haber dos soluciones. Puedes asumir que las apuestas son siempre las primeras y puedes pasar un índice de cero a la lista de conjuntos de resultados. Entonces obtienes camas, y luego obtienes baños completos con un índice de uno y dos para estos pies cuadrados de aquí, y tres para esto. Pero preferiría hacerlo de una manera más constructiva. Entonces me gustaría ir a extraer estas etiquetas de gasto primero, y luego voy dentro de cada una de las etiquetas de gasto y extraigo el valor dentro de la etiqueta B. Así que tenemos lapso para la cama info, y para los baños completos, que es este de aquí. Sí, en realidad, esta figura como la tercera. Entonces las camas son la primera y pies cuadrados, el área es segunda y luego camas completas y así sucesivamente. Entonces no tenemos que pensar en el orden de ellos. Sólo necesitamos agarrar los nombres de las clases. Entonces info apuesta eso significa que quieres acceder al ítem, bien, en este caso. Entonces quieres encontrar el lapso, y vamos a hacer primero las camas, que era info bed. Así que vamos a imprimirlo primero para ver si eres bueno para ir. Y así no obtienes ninguno para la primera propiedad. Entonces esto no tiene ningún dato para camas y baños, así que no puedes hacer nada al respecto. Solo necesitas aceptar ningún dato a veces. Y luego aquí está el código, entonces el código fuente para el siguiente. Ahora, aquí hay un truco. Si aplicas el método text a este objeto, entonces debería estar aquí, ese texto, obtienes un error. Y mira de cerca lo que dice el error. Entonces dice que el objeto no tipo no tiene texto de atributo. Ese objeto no tipo era esto aquí, así que ninguno, que es un objeto especial, y no tiene un método de texto disponible. Y entonces hay que contar para eso. Y la forma en que cuentas para estas excepciones es usando una declaración try and accept. Entonces necesitas Encerrar esta declaración impresa aquí con try Entonces prueba esto si funciona. Si no hace estas otras cosas aquí. Entonces cual es pasar. Así que simplemente ignora estos no tipos ahí. Así que de nuevo, intenta sacar realmente el método text de este texto span. Y si eso no está disponible, entonces solo pasa a la siguiente iteración del bucle Entonces probemos eso. Y sí, ahora está funcionando. Ahora, como puedes ver, tenemos el texto para la etiqueta B, pero también el texto de la etiqueta span. Entonces este es el texto de la etiqueta B, y este es el texto de la etiqueta span. Entonces, si eso te va bien, puedes dejarlo así. Pero me gustaría tener sólo el número llano. Y para ello, tal vez necesites aplicar los métodos find. Entonces tenemos, de nuevo, tenemos este código fuente, así que necesitamos encontrar dentro de ese código fuente. Necesitamos encontrar la etiqueta Bt, que no tiene nombre de clase, así que la dejamos así, y necesitamos extraer el texto de esa etiqueta de bits. Y eso sólo te da el número. Entonces cuatro, cuatro, cinco, y así sucesivamente. Entonces eso es bueno. Ahora, hagamos lo mismo. Entonces voy a copiar esta cuadra entera y haremos lo mismo por el número de baños. Hagamos un espacio aquí. Y para el número de eso fue así el tamaño del área. Y esta otra cosa de aquí. Entonces medio baños. Así que también contaremos para eso. Entonces info pies cuadrados, info pies cuadrados ahí. Vamos aquí así. Entonces tenemos info valor baño completo. Y uno más para los medios baños. Así que eso sería info valor medio baño. Ejecutar. Ahí tenemos un problema de sangría Entonces Troy, esta es buena. Este no es bueno aquí también. Por lo que es necesario sangrar las declaraciones después de Troy y el autor de la declaración excepto Así que ejecuta y veamos. Bueno. Entonces cuatro camas, y luego cuatro baños ahí. Pero entonces aquí tenemos la zona o la propiedad. Entonces el orden no es muy bueno así. En ese caso, no queremos escribir pase aquí, pero a lo mejor queremos imprimir ninguno. En esos casos, entonces imprimir, ninguno, imprimir, ninguno. Lo mismo aquí. Ejecutar. Y ahora se ve mejor. Entonces ahora sabemos el orden en que sabemos que tenemos cuatro camas en esta propiedad, y el tamaño del área no está disponible, y luego tenemos cuatro baños. Y entonces no tenemos ninguna información sobre los medios baños ahí. Entonces eso se ve bien. Y me gustaría detenerme aquí y obtener algunos datos más en la próxima conferencia. Sí, sigamos adelante. 203. Raspar elementos especiales: Aquí estamos otra vez. Y tenemos este script, que produce esta salida. Entonces tenemos algunos atributos para cada una de estas propiedades. Específicamente, esos son los atributos de este bloque aquí. Entonces dirección de precio y algunos atributos como el número de apuestas y así sucesivamente. Ahora me gustaría ir más allá y extraer el tamaño del lote para cada propiedad siempre que ese atributo esté disponible. Entonces como ves aquí, algunas propiedades no tienen mucho tamaño. Y si bien el tamaño del lote es un atributo importante para conocer de una propiedad, en este caso, también es bastante complicado de extraer de esta página web. Y la razón es que si miras el código fuente, verás que este es el nombre de los atributos, así que el tamaño del lote, y este es el valor real que queremos extraer. Y ambos están dentro de esta división. Entonces la primera línea ahí. Esa división tiene un nombre de clase de grupo de columnas. Ahora tenemos otra clase de grupo de columnas, así que otra división con la clase de grupo de columnas aquí como la segunda línea. Entonces si nos fijamos en otra propiedad, entonces otra fila de propiedad. Verás que esta división de grupos de columnas se está repitiendo aquí. Entonces, si escribes un bucle para extraer el span con la clase de nombre de entidad para todas las propiedades, para esta propiedad, podrías obtener el tamaño real del lote. Pero para este otro, probablemente obtendrías la edad de la propiedad, pero esperarías el tamaño del lote. Obtendría la antigüedad de la propiedad porque la antigüedad de la propiedad es el primer nombre de función allí. Y el tamaño del lote también es el nombre de la primera función. Así que con la clase de nombre de entidad en la segunda propiedad. Entonces este es uno de esos casos en los que hay que pensar en soluciones alternativas. Entonces, si apuntas al método de grupo de columnas, entonces dices encontrar todo en división con grupo de columnas de clase, y dentro de eso, encuentra el nombre de la entidad con índice cero, obtendrías las primeras líneas. ya lo sabes. Ahora, encontremos una solución entonces. Bueno, ¿qué tal recorrer todos estos grupos de columnas? Y luego comprobamos que si el texto del grupo de características es igual al tamaño del lote, entonces dame el texto dentro del nombre de la función. Entonces en esa iteración específica, nuevamente, si el grupo de entidades es igual al tamaño del lote o tiene una cadena de tamaño de lote dentro del texto, entonces en esa iteración actual, dame el valor de texto del nombre de la función Entonces vamos a necesitar un bucle aquí. Dentro de nuestro gran bucle. Entonces este gran bucle de aquí, llamémoslo el bucle grande está pasando por cada una de estas filas. Luego dentro de eso dentro de la iteración actual de ese bucle grande Entonces digamos que la iteración actual estaría pasando por esta propiedad Entonces dentro de eso, vamos a las divisiones del grupo de columnas. Entonces digamos cuatro, vamos a llamar a esta variable grupo de columnas en la variable actual será item. Entonces otra vez, ítem como lo hicimos ahí. Yo encuentro a todos, en realidad. Entonces quieres encontrar divisiones con un nombre de clase de columna Grupo. Grupo. Y permítanme imprimir rápidamente la variable de grupo de columnas. Entonces sólo para ver lo que tenemos hasta ahora. Y aquí vamos. Entonces estos son los datos que tenemos, y luego aquí va. Déjame subir aquí. Aquí está el código fuente para cada una de las divisiones del grupo de columnas. Entonces la primera división, la segunda división, y así sucesivamente. Entonces esto es características que corresponde a este encabezado aquí. Y entonces tenemos estilo arquitectónico, que no es lo que necesitamos. Tenemos tipo de techo, así que en cada iteración, Python está imprimiendo estas líneas Ahora bien, lo que queremos hacer con estas líneas, mantengamos ahí la impresión por un tiempo. Lo que queremos hacer con estas líneas es iterar a través de ellas nuevamente. Entonces iteraremos a través de este div y vamos a iterar a través de este otro div y veremos que si el texto o el grupo de características en esa iteración actual tiene el tamaño del lote de cadena, entonces obtendremos el texto del nombre de la función para esa Así que de nuevo, necesitamos un bucle cuatro aquí. Que pasará por cada una de estas divisiones de grupos de columnas. Entonces, lo que hará, accederá al elemento del grupo de entidades y también al elemento del nombre de la característica. Entonces, para el nombre de la función del grupo en y necesitamos usar una función zip allí. Entonces, como lo recordarás, una función zip, que es una función incorporada en Python, se usa para iterar a través de dos listas al mismo tiempo Entonces aquí es donde ingresas al Tolist dentro de la función zip Y nuestra lista de dos sería la primera sería grupo de columnas que encuentran todos los tramos, así que abarcan con un nombre de clase o grupo de entidades Del mismo modo, necesitamos acceder al grupo de columnas que encuentran sondeo, y necesitamos de nuevo la etiqueta span. Pero esta vez necesitamos una clase de nombre de entidad. Así que no confundas estas variables con estos nombres de clase. Y aquí cierra la función zip. Entonces este soporte de aquí. Entonces después de la declaración cuatro, necesitas la columna aquí. Bien. Ahora bien, ¿qué quieres hacer para cada grupo de entidades? Bueno, vamos a imprimir temporalmente el texto del grupo de características, por ejemplo. Y también el nombre de la función dot text. Y déjeme borrar esto. Entonces este grupo de columnas aquí corresponde con todo este bloque de divisiones. Así que ejecuta eso. Aquí tenemos una sintaxis no válida y buscamos la flecha. Sí, aquí hay una pequeña flecha. Entonces este de aquí nos está apuntando a este personaje, que en realidad es una semi columna. Por alguna razón, puse ahí un semiclumn, así que debería ser una columna, no un punto Bien, déjame ejecutarlo otra vez. Entonces esto es lo que obtenemos. Para la primera propiedad, por ejemplo, obtuvimos los atributos anteriores, impresos. Entonces no, no, no, para esta primera. Y luego tenemos aquí está el texto del grupo de características, y aquí está el texto del nombre de la función. Y de manera similar, tenemos el texto del grupo de características aquí para el siguiente grupo de características y nombre de función. Y entonces tenemos ahí la siguiente propiedad, que en realidad tiene bastantes atributos ahí. Calefacción de gas combustible. Y aquí hay algo que debes saber ahora. Deberías estar al tanto de. Déjame abrir de nuevo, sitio web de Century 21. Resortes de Roca. Entonces como puedes ver, la segunda propiedad no tiene tantos atributos. Por lo que tiene electrodomésticos de edad y sótano, pero no malas características y refrigeración, etcétera Por lo que estos atributos adicionales están alguna manera ocultos en el código fuente de esta página web, y puedes acceder a ellos si vas. Entonces si haces clic en el enlace de la página web de la propiedad específica. Entonces aquí están todos los atributos que estamos viendo aquí. Así que la chimenea cuenta dos chimeneas. Aquí está el conteo de chimeneas. Y también puedes ver que el tamaño del lote está listado en la página web de la propiedad. Entonces aquí está. Lo cual en realidad es algo bueno. Así que estamos siendo capaces de extraer todos los atributos de una propiedad sin tener que entrar dentro de la página web de la propiedad, el enlace de propiedad. Entonces eso es algo bueno. Y ahora, lo que tenemos que hacer es, mantengamos ahí la declaración impresa por un tiempo, y tenemos que verificarlo. Así que aquí bajo los cuatro bucles, si el tamaño del lote en grupo de características ese texto. Entonces, por ejemplo, ¿es la cadena de tamaño de lote dentro de este texto de grupo de características? Si es entonces dame la función nombrada texto. Entonces me va a dar el valor aquí. Si no lo es, entonces simplemente no hagas nada. Entonces dejamos el bucle tal como está. Así que permítanme borrar esta función ahora, la función print que ejecutamos anteriormente y ejecutarla. Así que aquí vamos. Aquí no tenemos nada. Estos son atributos anteriores. Y entonces tenemos cuatro atributos aquí, y luego tenemos 0.221 acres Aquí tenemos medio acre. Bien, eso se ve bien ahora, y ahora me gustaría pasar por la siguiente conferencia donde aprendas a deshacerte de estas declaraciones impresas y a almacenar realmente todos estos atributos en una tabla, así que en el marco de datos de Panda, luego exportamos el marco de datos simplemente en archivo CSV o archivo Excel, lo que quieras Entonces vamos a tener una columna de precios ahí y una columna de dirección, una columna de estado con un código postal, y también columnas con estos atributos de un tamaño de lote también. Entonces, sigamos adelante. 204. Guardar los datos extraídos en archivos CSV: Ahora, pensemos en cómo podemos sumar todos estos valores. Entonces estos valores en un marco de datos, marco de datos pandas. Entonces pensé en tener como una, dos, tres, cuatro, cinco, seis, siete, más el tamaño del lote ocho columnas en el marco de datos. Y luego por cada fila, tendrías, como por precio, tendrías 725,000 para esto, y luego la siguiente por 152,000, y así sucesivamente hasta que se consuman todas las propiedades Entonces espero que la estructura sea clara y cómo hacerlo ahora. Bueno, una solución sería tal vez iterar a través del marco de datos, pero esa es una solución costosa Lleva mucho tiempo, por lo que el proceso puede volverse lento cuando se itera a través datos porque los marcos de datos no se construyen para iterar a través Así que probablemente sea mejor crear un marco de datos a partir del diccionario Python o de una lista de diccionarios, tal vez. Y en realidad, eso es lo que voy a hacer. En cada iteración, lo que voy a hacer es agregar estos valores a un diccionario Entonces, por ejemplo, comenzaré con el primer diccionario. Y así en la primera iteración, tendré una clave de precio y el valor del precio como primer par del diccionario, y luego el siguiente par de ese mismo diccionario sería la clave de dirección y el valor de dirección Y luego vamos a la siguiente pareja. Entonces agregamos aquí el tercer par, y luego un cuarto par quinto, sexto y séptimo y octavo. Así que empareja un diccionario de ocho pares en la primera iteración. Entonces en la siguiente iteración, necesito crear otro diccionario más con las mismas claves Entonces tendríamos, nuevamente, el precio y el valor de ese precio, que correspondería al valor de una segunda propiedad. Y así construiré un segundo diccionario y luego un tercer diccionario, y así sucesivamente hasta que se consuman las diez propiedades aquí. Entonces voy a terminar con diez diccionarios. Ahora, también necesitas almacenar estos diccionarios en alguna parte porque si solo iteras a través de los diccionarios y los pierdes en cada iteración, entonces no has hecho nada Entonces, lo que haremos almacenamos esos diccionarios en una lista. Entonces, lo primero que quizás quieras hacer es querer iniciar cada iteración con un diccionario vacío para que puedas agregar los pares de valores clave a ese diccionario de frases Entonces, una vez que creas un diccionario vacío, entonces continúas y reemplazas estas declaraciones impresas. Entonces querrías digamos precio como la clave del primer diccionario, y eso sería igual. Si no necesitamos los corchetes, éste, tampoco. Entonces eso es todo. De igual manera, se puede hacer esto era dirección. Retira eso otra vez aquí. Llamemos a esta localidad. Entonces estamos creando claves sobre la marcha, así dirección de precio y localidad, y estamos asignando valores a esas claves nuevamente sobre la marcha Entonces tal vez tendría sentido tener precio aquí abajo. Entonces comenzamos con dirección, localidad, y luego el precio. Esas serían las camas. Y si no hay camas, entonces necesitas pasar ninguna por las camas. Y entonces, de nuevo, esa sería área, que es igual a estas otra vez. Lo mismo para zona, no cuando no hay área y uno más aquí. Baños completos. Déjame copiar esto. Ninguno. Y serían baños calientes. Igual a ninguno. Aquí tenemos un segmento de impresión, que no necesitamos. Así que aquí estamos pasando por cada nombre de función de grupo si tamaño del lote en el texto del grupo de características, entonces llamemos a este tamaño de lote. Es igual al texto del nombre de la entidad. Y vamos a eliminar esta declaración impresa. Y así al final de este bucle, tendrás tu primer diccionario. Entonces, al final de la primera iteración, tendrás tu primer diccionario Ahora quieres guardar ese diccionario en alguna parte. Así que vamos a almacenarlo en una lista. Entonces normalmente, necesitas crear una lista fuera del bucle, una lista vacía ahí. Y luego al final del bucle, que es exactamente aquí, quiere añadir el diccionario Entonces obtendrás una lista de múltiples diccionarios. En este caso, obtendrás una lista de diez diccionarios. Ejecutemos esto. Ahí tenemos una sintaxis no válida, bads. Olvidé tener ahí al operador de asignación, y correcto. No hay error esta vez. Imprimamos L aquí. Y se ve bien. Para que puedas comprobar la longitud de este. Entonces son diez. Ahora bien, si quieres lanzar esta lista de diccionarios a un marco de datos, esta lista a un marco de datos, bueno, necesitarías usar Pandas, y luego DF es igual al marco de datos de pandas Y aquí necesitamos escribir una declaración realmente larga. Estoy trotando. Solo necesitas pasar la lista ahí y crear un marco de datos a partir de esa lista de diccionarios. Así que vamos a revisar el marco de datos. Y boom, aquí están los datos. Y como puedes ver, incluso conseguimos valores de Nan cuando no hay mucho tamaño. Entonces Pandas entiende cuando no hay datos en los diccionarios Entonces, por ejemplo, aquí no teníamos mucho tamaño, y Pandas asignará un valor non by nan para eso, que si quieres, simplemente puedes reemplazar por un no valor Entonces necesitas trabajar mucho para guardar esto en un archivo CSV. Una declaración muy larga. Bien, entonces voy a poner ese CSV, y debería ser bueno para ir. Déjame comprobarlo. Aquí hay un archivo. Y aquí están los datos. Entonces se ve bien. Genial. Ahora bien, lo que viene después cuando, como se puede adivinar, tenemos que ir a obtener las propiedades de todas las páginas. Entonces segunda página y tercera página. Entonces lo haremos en la próxima conferencia. Nos vemos. 205. Rastreo a través de varias páginas web +: Genial. Entonces conseguimos que el guión funcionara para una página. Así que para la primera página, pero es posible que tengamos varias páginas ahí. Entonces, para Rock Springs, tenemos tres páginas con 28 anuncios. Así que 28 propiedades listadas ahí para la venta o para fines. En realidad, están a la venta, así que casas en venta. Entonces esta es la segunda página con diez propiedades más, y luego tienes la última página ahí, que debería tener ocho propiedades. Entonces tenemos 28 en total. Ahora bien, este es un pueblo pequeño, así que no tiene muchos listados ahí, pero con las grandes ciudades, tendrás muchas páginas. Y el script que vamos a construir para extraer datos de propiedades de estas páginas funcionará con cualquier número de páginas. ¿Cómo hacemos para obtener datos de todas las páginas? Bueno, ahí no hay magia, pero hay un solo truco. Ya sabes, si vuelves a buscar Rock Springs, verás una URL inicial ahí, que cargamos en Python. Creo que fue sin esta K igual a uno. Fue así solamente. Entonces no estoy seguro de qué significaba ahí, pero de todos modos, tal vez fue porque volví a buscar manantiales de roca. Entonces esta es la primera página. Ahora bien, la lógica detrás de extraer datos de las otras páginas es lo que tenemos que hacer es que también necesitamos cargar las otras páginas en Python , usando request nuevamente. Así como lo hicimos aquí, cargamos la primera página. Ahora necesitamos encontrar una manera de cargar las otras páginas. Podemos ir manualmente a través de cada una de las 300 páginas, tres páginas en este caso, y copiar la URL, o podemos tratar de encontrar una manera. Entonces, para averiguar la regla, si hay una regla que la URL cambia cuando cambias por las páginas, y probablemente siempre sea una regla ahí. Entonces tenemos que averiguarlo. Entonces fui a la segunda página, y como ves, ahora la URL cambió con alguna extensión ahí. Entonces T es igual a cero y C es igual a cero. Si vas a la tercera página, ves que la URL anterior al 20 no cambió, pero C se cambió a 20. Ahora bien, si vuelves a la primera página, verás que S es igual a cero. Entonces, cuando buscas resortes de roca directamente, obtienes la URL base allí sin esta extensión. Y luego si vas a la primera página, manualmente haciendo clic en el número uno aquí, serás incluido en la regla que cambia la URL cuando te muevas por todas las páginas. Eso significa que podemos usar esta URL para tomar la primera página, y luego podemos recorrer la URL. Y cambiar este valor a diez a medida que iteramos. Incrementar en diez. Entonces de 010 y 20, y si tenemos más páginas, eso sería 30 y así sucesivamente. Entonces espero que entiendas la idea. Ahora sigamos adelante y veamos, así que vamos a almacenar allí una URL base. Deberíamos ser algo así sin el número. Entonces esta es la URL stat. Y ahora antes de que solicitemos el código fuente con solicitudes, primero intentemos construir URL e imprimirlas. Así que estamos usando una declaración impresa como siempre para probar las cosas. Entonces digamos para página en rango, bueno, el rango debería comenzar desde cero, y hasta teníamos tres páginas ahí, y la última página tenía una de 20. Entonces tal vez poner ahí 30 y luego iterar con un paso de diez Entonces en cada iteración, aumentaremos en diez Por ahora, no te preocupes por el número de páginas. Por ahora, sólo estamos poniendo un valor manualmente, así que sabemos que esto tiene tres páginas, así que ahí estoy poniendo 30. Pero más adelante, cambiaremos esto a realmente una variable que agarra un número de páginas del sitio web Entonces, si en lugar de Rock Springs, tendrías Nueva York y probablemente obtendrías 200 páginas. Entonces quieres agarrar el número de la última página 200 y luego pasar algo así como 200 veces 20 aquí, así obtienes 2000 y obtienes un bucle que va a cero, diez, y hasta 2000. Entonces lo haremos más tarde. Por ahora, ¿imprimir? URL base plus. Bueno, esta variable de página obtendría un entero. Así que necesitamos convertir ese entero a cadena usando el método string. Y luego la página va dentro de eso. Entonces probemos esto. Ana, estos son los tríos. Déjame abrir uno de ellos. Aquí vamos. Y este es el segundo conjunto de resultados. Entonces es la página dos. Genial. Déjame cerrar esto. Pero claro, la impresión no es lo que nos interesa, así que no queremos imprimir la URL. Queremos obtener el código fuente de ellos. Entonces lo que quieres hacer es estar a la altura de las solicitudes. Entonces estás dentro del bucle, y luego fusionaremos este bucle con el otro código. Entonces, centrémonos en esto por ahora. Obtener URL base más la cadena del número de página. Y justo al margen de eso, quieres agarrar el contenido de solicitud y también hacer la sopa. Tan hermosa sopa, analizador C y HML. Y por ahora, intentemos imprimir la versión prettificada del objeto sopa. Genial. Y eso tomó un tiempo, pero aquí está el resultado. Entonces en la primera iteración, obtuvimos la URL impresa por esta función, por la función print, y luego obtuvimos la versión prettificada del código fuente para la primera URL, que es Así que de todos modos, entiendes la idea. Entonces eso parece estar funcionando, pero lo que necesitamos de todo el código fuente. Entonces tenemos el código fuente de las tres páginas. Entonces no necesitamos imprimir todo el código fuente, sino que solo necesitamos extraer las divisiones de fila de propiedades. Así como lo hicimos aquí, así conseguimos la sopa para primera página y luego creamos una variable all ahí. Entonces hacemos lo mismo aquí. Pero esta vez, debería ser sangrada porque está dentro de un bucle Así que todos y propiedad fila clase división, que se ve bien. Entonces si lo imprimes, solo para checar todo aquí está el resultado. Entonces se imprimió la primera URL, y luego tienes estas divisiones. Y entonces tienes bastantes datos aquí también. Entonces ahora, lo que quieres hacer es querer agarrar todo el código que acabas de construir ahí y tal vez eliminar esto y eliminar toda la celda, y quieres poner ese código aquí arriba. Genial. Ahora, lo siguiente es que hiciste esto por una página, y ahora estás recorriendo todas las páginas Entonces lo que quieres hacer es querer sangrar todo este bloque a la derecha para que este bloque se convierta en parte del cuatro bucle que hay ahí Así que controla y cierra el soporte jurar para sancionar el texto seleccionado Entonces ahora, este bucle aquí se ejecutará tantas veces como haya páginas ahí. Entonces, ¿qué podemos hacer ahora? Bueno, podemos probar el código. Entonces déjame ejecutar este turno entrar, y tenemos que esperar un poco aquí. Entonces eso parece que está funcionando. Y así en este punto, deberíamos tener ahí la lista L con todos los datos. Y aquí convertimos esa lista L a un marco de datos. Entonces ejecutemos esto. Y luego aquí ejecutamos el marco de datos. Entonces veamos ahora. Y así tenemos 425 filas porque partimos de cero. Pero teníamos 28 anuncios, en realidad. Entonces eso significa que estas tres últimas propiedades no han sido listadas aquí porque algo pasó ahí. Entonces estamos en la página tres aquí, y el último exitoso fue Wen Avenue. Entonces buscamos la Avenida Wende aquí está la Avenida Wende. Por lo que tiene una dirección y la localidad Sook Springs. Y luego el que viene después de eso, sólo tiene la localidad ahí. Entonces en ese caso, lo que podrías hacer es intentar manejar una excepción aquí en el código. Entonces para este de aquí, podríamos decir, tratar de hacer eso y aceptar dCalit igual a ninguno Y ahora voy a ejecutar esto de nuevo. Esperemos que no consigamos un error ahí. Sí, eso se ejecutó con éxito. Ejecute eso en el marco de datos. Y vamos a ver. Sí, ahora, parece que ahí tenemos 28 filas. Entonces eso parece estar funcionando. Y lo último que quieres hacer es, ya sabes, en lugar de pasar este rango manualmente aquí, podríamos agregar en realidad una variable que detecte un número de página. Y todo lo que tenemos que hacer es ir a nuestra página web. Déjame quitarle esto. Y entonces quieres averiguar dónde se está renderizando este último número. Entonces ese es el indicador del número de páginas. Entonces tenemos tres páginas en este caso, inspecciona eso y así eso nos lleva a este punto. En realidad, en este caso, dice página, página actual. Entonces vayamos a la primera página. Y déjame cerrar esto. Entonces se supone que debemos estar en la primera página cuando estamos en el guión por primera vez. Y en esa primera página, entonces queremos agarrar el contenido de la primera página, y luego queremos conocer el elemento de ese último número ahí. Entonces vemos que ese es el elemento a con página de clase. Y aquí está el texto así tres. Ese debería ser en realidad el último elemento con una clase de página. Entonces tendrás bastantes elementos con clase de página ahí, y este debería ser el último. Sí. Entonces ese debería ser el último. Así que lo tenemos en mente, y vamos aquí, y lo que podemos hacer aquí ahora es o tomemos ese número de página aquí. Entonces página llamemos a ese número de página. Eso sería igual a sopa. Por lo que la sopa contendrá el código HML de la primera página. Entonces esta de aquí, que no es una petición Ajax. Entonces es simplemente una simple de esta página. Y así queremos encontrar todos los elementos A con una clase. De página. Y así si lo imprimo solo para ver lo que tenemos hasta ahora, número de página mira donde tienes algunos elementos ahí. Pero el último es el último número de página. Entonces tres, eso es lo que necesitamos. Entonces necesitamos agarrar el último elemento de la lista, lo que significa menos uno, un índice de menos uno y texto. Y si, tenemos tres aquí. Y entonces necesitamos transformar este número ahora en 30. Y la forma en que lo haces es solo número de página por diez. Entonces eso te daría 30. Bueno, casi porque este número de página es en realidad una cadena aquí, ya sabes, escribe otro corchete. Entonces es tipo string. Y eso significa que necesitas agregar entero aquí. Entonces quieres convertir esta cadena a un entero y luego multiplicarla por diez para que obtengas 30. Entonces eso debería hacerlo ahora, y todo debería funcionar, creo. Entonces déjame ejecutar esto. Se está imprimiendo la URL y se termina el guión. Entonces, cuando no tienes el texto ocupado antes del título de tu archivo aquí, eso significa que el script se está ejecutando. Entonces ahora no tenemos eso, así que el guión terminó. Ejecuta eso. Y estos son nuestros resultados y exportarlo a un archivo CSV. Y vamos a comprobarlo. Entonces puse ese CSV. Y aquí están los datos. Entonces aquí no tenemos ninguna reputación No, todo se ve único. Eso cierra esta sección de web scrabbing. Entonces si quieres encontrar otras localidades, así que probé esto para manantiales de roca, pero puedes probarlo con cualquier otra localidad Entonces todo lo que tienes que hacer es cambiar la URL o incluso podrías implementar alguna entrada del usuario para que el usuario ingrese un nombre, y luego construyes la URL, y luego pasas la URL aquí. Entonces no necesitamos esto, limpiar esto también. Y si quieres, puedes fusionar esta celda con esta. Para que puedas ejecutar todo el script en una celda. Y también puedes guardar esto. Así que descárgalo como un archivo Python y obtendrás todo el código fuente. Así que el script Python. Y además estas líneas pero con un hashtag comman. Y puedes ejecutarlo como un guión completo. Entonces espero que disfrutes esto. Sé que esto fue bastante para digerir. Y si tienes dudas, por favor, pregúntalas. Estaría encantado de ayudarle. Entonces espero que hayas aprendido mucho de esto, y pasemos por las siguientes secciones, así que todavía tenemos cosas muy interesantes que hacer. Y te veré más tarde. 206. Aplicación 9: blog y aplicación Translator + Django y Bootstrap: Hola, bienvenidos a una conferencia muy informativa, especialmente sobre aquellos que están interesados en construir aplicaciones web con Python. Como ya sabrás, Python se utiliza para diferentes propósitos desde automatizar tareas rutinarias en tu trabajo Digamos que quieres generar reportes PDF automáticamente, enviar correos electrónicos automáticos, etcétera Entonces puedes usar Python para análisis y visualización de datos, ciencia de datos y aprendizaje automático, pero también para desarrollo web. Así que construyendo aplicaciones web con Python. Y aquí es donde me gustaría detenerme y explicarte cómo exactamente se puede usar Python en el desarrollo web y qué frameworks web Python deberías usar. Entonces acabo de mencionar la palabra web framework. Entonces, ¿qué es un framework web? Bueno, con Python, puedes construir aplicaciones ya sea usando Python simple o usando uno de los frameworks web de Python, que son básicamente bibliotecas Python que instalas con PIP Y estos frameworks web facilitan la escritura de aplicaciones web usando Python. Ahora, te puedo decir que crear una aplicación web sin usar uno de estos frameworks web es como reinventar la rueda Porque si no usas un framework web, básicamente tienes que reescribir todo el código que escribieron los autores de estos frameworks web Entonces, en cambio, solo instalamos estos frameworks web, y luego usamos ese código. Eso es dentro de los frameworks web. Y ese código suele ser cosas como manejar solicitudes HDP y entregar páginas web en el navegador Así que las tareas rutinarias de bajo nivel. Pero en lugar de lidiar con esta tarea, queremos enfocarnos en construir la funcionalidad, la practicidad de nuestra aplicación web Entonces creando los cuadros de entrada, por ejemplo, para nuestros formularios, enviando usuarios de una página web a otra, así cosas así. Entonces deberías usar un framework web. Entonces supongo que hemos aclarado ese punto que debes usar un framework web. Ahora bien, la siguiente pregunta es, ¿cuál de los frameworks web debes usar? Bueno, hay muchos frameworks web para Python, pero solo me enfocaré en tres de ellos, que es flask, jango, y solo Pi Empecemos con FLASK. FLASK es un framework web generalmente dirigido a la construcción de pequeñas aplicaciones web. Por ejemplo, digamos que solo quieres construir un pequeño traductor que traduzca de un idioma a otro. Piensa en Google Translate. Si solo quieres esa aplicación web donde la gente va a tu dominio, digamos, translator.com, y solo tienes esas dos casillas ahí, las personas escribirán el texto en un idioma en el primer cuadro y obtendrán los resultados Entonces la traducción en la otra caja. Entonces esa sería una pequeña app. Otro ejemplo sería una app donde conviertes, digamos, imágenes JPG a imágenes PNG. Entonces la gente sube una imagen en JPG o viceversa. Entonces FLASK maneja todos aquellos que suben y procesan en segundo plano En el fondo, por supuesto, probablemente necesitarás una biblioteca de procesamiento de imágenes además de FLASK. Entonces tendrás que instalar Pip instalar Flask y tal vez Pip instalar CV dos, así que abre CV para hacer el procesamiento Pero el servicio al sitio web a la aplicación web se hará con FLASK. Entonces FLASK obtendrá la imagen original, y obtendrá la imagen de salida de OpenCV y servirá la imagen de salida para su descarga en su aplicación web Entonces estas son pequeñas aplicaciones web. Ahora, no me malinterpretes con FAS, también puedes crear aplicaciones web más grandes y lo que quiero decir con aplicaciones web más grandes. Aplicaciones web más grandes, quiero decir cosas como, digamos que tienes un sitio web de blog donde agregas blogs cada semana o cada dos días más o menos. Entonces tienes quizá varios autores que escriben contenido para tu blog. Para ese bloque web. Entonces vamos a tener diferentes bloques, y todos estos bloques tienen que ser guardados en una base de datos. Ahora, Flask puede hacer esto, claro, pero Jango lo haría mejor Jango haría esto mejor porque es más fácil trabajar con bases de datos con jango porque tiene un mejor nivel de abstracción Entonces con FAS, también puedes hacer esto con FAS, pero es más trabajo. Tienes que hacer más tareas rutinarias para FAS. Y jango también te permitiría agregar más aplicaciones en ese proyecto de sitio web Entonces tomamos el ejemplo de los bloques. Tendrás bloques en tu sitio web, pero tal vez quieras agregar otra característica. Digamos que quieres agregar un traductor ahí. Entonces Jango también puede construir un traductor. Encima de ese sitio web existente. Pero si solo quieres construir un traductor solo, entonces jango sería una exageración ¿Qué quiero decir con eso? Con eso, quiero decir que para aplicaciones web más pequeñas, jango requiere más trabajo configurarlo para configurar un proyecto jango Se necesita más trabajo. Pero una vez que configuras un proyecto jangle, entonces las cosas van bien. Pero para aplicaciones más pequeñas, es bueno simplemente crear una aplicación FAk Es muy fácil crear uno. Entonces esa es la diferencia entre jango y FASC. Ahora aquí viene Just Pi. Just Pi es un framework muy nuevo. Y ¿por qué incluí Just Pi en este conjunto de tres frameworks web? Ahora, Just Pi es bastante especial. ¿Qué quiero decir con eso? Bueno, con FAS y jango, también necesitas conocer HTML y CSS para poder construir aplicaciones web porque cada página web que ves en Internet, está construida sobre HTML Entonces todo el texto y los cuadros de entrada y botones. Todos esos están construidos en código HTML, lo cual es muy fácil. Así que no te asustes con el HTML. Es un idioma muy fácil de aprender. Pero solo estoy diciendo que no se puede crear el front-end de una página web con Python. Entonces HTML es para el front-end. Y luego CSS es embellecer para embellecer el aspecto de estos Entonces los cuadros de texto, el texto, los colores, todos estos se pueden hacer para que se vean más agradables con CSS Entonces CSS es también un lenguaje que también es muy fácil de aprender. Así que tendrás que escribir algo de código CSS y HTML y guardar ese código en archivos HTML y CSS respectivamente, y poner esos archivos dentro de tu aplicación web, ya sea en jango o Flask Ahora, aquí es donde entra JSPi. JSPi permite crear aplicaciones web sin escribir ninguna línea de HTML y CSS Pero Juspi es muy nuevo. Es un nuevo framework, framework web. Y como dije, lo bueno de Jpi es que no tienes que escribir HML y CSS porque JSPi tiene algunos Digamos, tiene un DIF para crear estas divisiones donde puedes poner textos y cosas así, o tiene un objeto button, Python button object para crear un botón en la página web. Por supuesto, la desventaja de esto es que no eres muy flexible como lo harías con FLASK y jango De nuevo, yo diría que Jpi también es para aplicaciones web pequeñas Si quieres construir un sitio web de blog con mucho contenido, Just Pi no es la mejor opción. No funciona muy bien con bases de datos tanto como lo hace Jango o FLASK. Pero nuevamente, si solo quieres construir una pequeña aplicación web y no conoces CSS o HTML, entonces Juspi podría ser mejor que FLASK. Entonces esa fue una visión general de tres frameworks web para Python. Ahora, todos estos tres frameworks web están cubiertos en el curso en este curso. Entonces construiremos al menos una aplicación web con cada uno de estos tres frameworks web, y puede ser tentador que quieras ver solo los videos del framework web que te gusten, pero te recomendaría que no te saltes ninguno de estos frameworks web Diciendo eso porque si quieres hacer desarrollo web con Python, entonces es una buena idea estar expuesto a diferentes frameworks web. Cada uno de los frameworks hace las cosas de manera diferente, por lo que aprenderás mucho de desarrollo web. Por ejemplo, FASC hace las cosas un poco más bajas y crudas, y eso te ayuda a entender el desarrollo web desde una perspectiva más profunda Pero luego aprendes sobre jango y apreciarás el alto nivel de abstracción que tiene el jango Apreciarás lo fácil que es hacer cambios en tus aplicaciones web. Cuando usas jango por ese alto nivel de usabilidad. Entonces jango te esconde algunas cosas, lo que facilita las cosas, pero no entenderás algunas de esas cosas Entonces por eso también deberías aprender Flask. Y además Jus Pi es muy divertido de aprender. Y recomendaría a Juspi especialmente para alguien que no esté interesado en convertirse en un desarrollador web core Entonces tal vez eres analista de datos, pero solo quieres hacer una aplicación web donde muestres algunos datos, alguna visualización en esa aplicación web. En ese caso, Jus Pi podría ser en realidad la mejor opción. Pero si quieres ser un desarrollador web puro, entonces quieres aprender jangle and flask Entonces, cuando tengas que construir una aplicación web, puedes elegir uno de los frameworks web que es mejor para ese proyecto o tal vez el framework web que conoces mejor. ¿Por qué no? Espero que esto ayude. Hablaré con usted más tarde. 207. Configuración de un entorno virtual: Hola. En este video, aprenderás a crear y usar un entorno virtual Python. Entonces, ¿qué es un entorno virtual Python? Bueno, es solo una copia de tu instalación de Python. Entonces, en otras palabras, una copia de tu intérprete Python. Entonces, cuando descargas Python desde python.org o desde Anaconda, estás Ahora hacemos una copia de la misma. ¿Por qué hacemos una copia? Porque con Python, podemos escribir diferentes programas. Y para cada programa, es posible que necesitemos instalar diferentes paquetes, así que diferentes bibliotecas. Y normalmente instalamos estas bibliotecas en nuestra instalación principal de Python. Entonces en el intérprete que obtuvimos de python.org o Anaconda, a eso también se le conoce como Pero al hacer una copia para cada programa que construimos, entonces instalamos bibliotecas solo para esa copia del intérprete. El beneficio de esto es especialmente para las aplicaciones web ya que al crear una aplicación web, implementará posteriormente en algunos servidores en línea. Y cuando haces una copia del intérprete y luego instalas las bibliotecas que necesitas en esa copia en ese entorno virtual, entonces tienes una lista clara de las bibliotecas que tienes instaladas. Para que puedas generar una lista entonces puedes darle esa lista al servidor donde desplegarás tu aplicación web. Para que ese servidor obtenga la lista de bibliotecas de esa lista e instalarlas. Ahora bien, el beneficio aquí es que si tuvieras tu instalación global de Python, tendrías muchas, muchas bibliotecas. Entonces ese servidor tendría que instalar todas esas tantas bibliotecas. Lo cual no es una buena idea. Entonces, ¿por qué no tener un intérprete para cada proyecto Python Entonces ahora que estamos a punto de crear nuestra app jango, vamos a crear un entorno virtual primero en código de Visual Studio Así es como lo haces. Entonces antes que nada, estoy abierto el código de Visual Studio. Entonces esta es la página de bienvenida. Aún no he creado ningún proyecto. Así que voy a ir a crear un proyecto que es básicamente sólo se abre una carpeta, un directorio. En código de Visual Studio. Así que ve a Archivo y luego ve a Abrir carpeta o abrir dependiendo de qué sistema operativo seas. Entonces esto puede ser una carpeta abierta o abierta. Haga clic allí y luego localice una carpeta vacía que debería haber creado antes. He creado esta carpeta vacía jangoblock traductor. Ya ves que está completamente vacío. Entonces voy a presionar en abrir y eso abrirá esa carpeta. Aquí se ve aquí en mi árbol explorador sobre el código de Visual Studio. Ahora que tenemos la carpeta. Entonces en esta carpeta, vamos a poner todos los archivos para nuestro proyecto jango, incluyendo la copia del intérprete Python Entonces el entorno virtual. Para crear esta copia, es como lo haces. Entonces, antes que nada, necesitas abrir una terminal y primero tienes que hacer una comprobación. Así que asegúrate de qué Python estás usando. Entonces en mi caso, uso un comando, Python 3.9, y eso abre Python. Entonces este es un Python global instalado en mi computadora. Entonces estoy seguro de que este comando está funcionando bien. En tu caso, podría ser solo Python sin 3.9 o Python tres. Depende de lo que hayas estado usando. Entonces donde quiera que hayas estado usando voy a salir de este shell interactivo. Así que esto era solo para probar el comando Python. Ahora sé que esto está funcionando, así que puedo ir y hacer Python 3.9. Así que aquí no hay espacios. Después un espacio, la bandera, luego V luego NV. Entonces, ¿qué es esto? Bueno, VNV es una biblioteca que está instalada. Por defecto, es una biblioteca estándar para Python. Viene enviado con Python. Entonces estoy usando esa biblioteca. Entonces, cuando usas ese comando, Python 3.9 o Python, y luego usas esa bandera, eso significa que estás a punto ejecutar esa biblioteca como scripts de Python. Y entonces este fin es la carpeta donde se colocará la copia del intérprete Python. Así que presiona Enter. Y ves enseguida que N se creó esta carpeta aquí. Y si explico esta carpeta, verás que hay varias otras carpetas aquí, y dentro de este bin aquí, verás que tenemos el Python exectable Entonces esa es una copia de Python. Se puede usar ya sea como Python o Python tres o Python 3.9. Pero ahora te voy a mostrar cómo usar esa Python en lugar de una Python global. Así que no hagas nada con esa carpeta. Porque lo que queremos hacer ahora es que queremos seleccionar un intérprete de Python predeterminado para este proyecto de código de Visual Studio en particular. Para ello, quieres ir a la Paleta de Comandos. Eso se puede hacer con atajos, en realidad, en Mac, sería comando shift, P, presione los tres de ellos al mismo tiempo. En Windows, sería Control, Shift, P, así que eso mostrará este cuadro, y luego podrás escribir ahí Seleccionar intérprete. Entonces esto es lo que queremos usar Python Select Interpreter. Eso manda. Da click ahí. Y verás esta lista. Entonces tengo diferentes Pitones en mi sistema. Uno de ellos es este entorno visual aquí que acabo de instalar, y ese es el que quiero elegir. Entonces presiona ahí. Y ahora deberías ver aquí abajo ese Python 3.9 0.6 en mi caso con esta carpeta. N es la carpeta. V es la biblioteca del entorno virtual. Esto ahora se utilizará como Python predeterminado. ¿Eso significa? Bueno, eso significa que si ahora escribes Python aquí, pero primero cierras esta terminal y abres una nueva, así que para tener una actualización de terminal, nueva terminal, verás que ahora antes esta etiqueta aquí que me dice que escriba algo aquí, tengo esto entre paréntesis Eso significa que se está utilizando este entorno virtual Python. Ahora bien, si solo escribo Python, se está utilizando Python 3.9 0.6 de ese entorno virtual. Déjame salir. También puedo escribir Python 3.9 y se utilizará el mismo. Cualquiera de estos comandos aquí, Python, Python tres o Python 3.9. Así que asegúrate de tener eso ahí. Entonces, ¿cómo funciona esto? Porque parece magia. Bueno, funciona así. Permítanme cerrar de nuevo esta terminal y abrir una nueva, nueva terminal. Entonces ves que aquí tenemos un comando siendo ejecutado por código de visual studio cuando abres una nueva terminal. Entonces dice fuente, que es un comando para activar el entorno virtual. Entonces fuente y luego la ruta al archivo de activación. Ya ves que es el traductor jangoblock, que es esta carpeta N B Activar. Activar NBN. Este archivo de activación se está ejecutando, y ese es el comando que establece el entorno a este entorno virtual. Eso significa también que puedes usar Python tanto desde aquí como un shell Python interactivo, pero también si quieres escribir un archivo ahora. Entonces digamos crear un archivo. Así que ten cuidado aquí. Voy a escribir Hola PY. Estoy diciendo que ten cuidado porque lo que pasa es que este archivo fue creado dentro de mi carpeta NV. Entonces eso no es algo bueno. No quieres tocar la carpeta F. Entonces voy a borrar ese archivo y volver a crearlo. Para evitar que el archivo esté dentro del Nfle, primero desea presionar escape, y eso quitará el foco de esa carpeta NF Entonces puedes ir aquí y crear el archivo. Ahora ves que el archivo se crea en ese directorio raíz, así que jangle block translator hello dot PY Y si digo imprimir hola aquí, bien. Y ahora puedo ejecutar este archivo usando estas orejas triangulares verdes del fondo redondo. Presione eso y el archivo se ejecutará usando el entorno virtual Python. Entonces ven aquí lo que pasó en el fondo. Así que de nuevo, para terminarlo, se utilizó el entorno virtual cuando abrimos el Python Shell. También se usó cuando ejecutamos el archivo Python, y también se usa si instalamos paquetes de terceros. Entonces digamos PIP instala jango para instalar jango. Ese jango se instalará para este Python en particular, no para nuestro Python global Y te puedo probar eso yendo a N y luego a Lip y verás que jango se acaba agregar a los paquetes de terceros aquí dentro Entonces JanGot es lo que acabamos de instalar. Para deshacerse de esta advertencia, posible que desee ejecutar este comando como se sugiere Python 3.9 o Python directamente, instalación PIP, dash, dash, upgrade, PIP para actualizar local el PIP virtual, por así decirlo Derecha. Y ahora, si cierro este proyecto, lo vuelvo a abrir. Entonces puedo volver a mi proyecto anterior ya sea usando esta sección reciente aquí, así que dando clic en eso o yendo a Archivo, Abrir reciente y ubicar el proyecto ahí. O una tercera vía sería de nuevo ir a Archivo, Abrir y volver a ir a esa carpeta, así al directorio raíz. Entonces esos son y hola punto PY y presiona Abrir. Y el mismo proyecto volverá a abrirse, pero hay que cerrar la terminal actual y abrir una nueva. Para que el entorno virtual esté activo en la nueva terminal, ya ves ahora vemos este final aquí. Y, por supuesto, ahora también se puede ejecutar ese archivo nuevamente, y se utilizará el entorno virtual para ejecutar y obtener la salida. Entonces así es como puedes usar el entorno virtual en el código de Visual Studio. Gracias. 208. Creación de proyectos de Django: Hola, bienvenido de nuevo. En este video, te mostraré cómo crear un proyecto jango ¿Qué es un proyecto jango? Bueno, cuando creas una aplicación web con jango, primero, quieres crear un proyecto jango, que es un conjunto de archivos que son generados automáticamente por Esto es lo que voy a mostrarles ahora. Entonces estos son los archivos del proyecto. Pero entonces puedes agregar apps a ese proyecto. Entonces tienes un proyecto, pero es posible que tengas varias aplicaciones. Por ejemplo, en nuestro caso, vamos a tener un proyecto, pero luego vamos a tener la app block y la app translator también. Entonces dos aplicaciones, un proyecto. Ahora déjame mostrarte cómo crear el proyecto. Para ello, es necesario tener instalado jango y preferentemente tener un entorno virtual Te mostré cómo crear un entorno virtual en el video anterior. Entonces tengo ahora esta carpeta, el directorio raíz, la carpeta, que tiene un entorno virtual, el archivo lot PY, que voy a eliminar porque ya no lo necesitamos. Entonces tengo jango instalado. Eso significa que ahora puedo crear un proyecto usando el comando jango admin Entonces jango viene con algunos comandos que se pueden usar para realizar diferentes operaciones con jango Entonces Jango admin este comando, junto con el comando start project creará un proyecto jangle, y luego necesitas dar un nombre para un nuevo directorio que jango Digamos de mi lado. Y luego espacio y un punto. El punto significa que la carpeta actual, que es el traductor de bloques jangled, es una carpeta de proyecto, por lo que colocará los archivos en este directorio Entonces ejecuta ese comando. Y se creará esta carpeta y este archivo. Y esta carpeta tiene algunos otros archivos en su interior. Entonces, ¿qué son estos archivos ahora? Bueno, tenemos este archivo init, que es un archivo vacío, y aquí dentro, es opcional Quizás más tarde, puedas colocar las cosas que quieras que se ejecuten de inmediato cuando se inicie el programa cuando se inicie la aplicación web. Entonces voy a dejar eso ahora mismo, vamos a dejarlo vacío. Y entonces tenemos este archivo Sg, sosg punto PY. Este es un archivo de configuración que es posible que desee cambiar más adelante cuando despliegue su aplicación jangle en el servidor ANSG, y también hay otro tipo de Entonces depende de dónde lo vayas a desplegar. El otro tipo es Wiz g server o Wiz G, si te gusta este de aquí Entonces esa es la otra configuración dependiendo de qué tipo de servidor vas a poner tu proyecto jango para que esté en un servidor de producción en línea para que todos puedan verlo Y luego tenemos la configuración de ese archivo PY. Esto va a contener todos los ajustes así que por ejemplo, la zona horaria, el lugar de los archivos estáticos como imágenes y archivos CSS, los vamos a cubrir. Así que no los cambies. Y luego tenemos la URL, ese es el archivo PY. Esto tendrá básicamente la URL de tu proyecto, cómo se rooteará la URL y así sucesivamente. Entonces ese era mi sitio, y luego hemos manejado ese PY. Este es un archivo que normalmente no cambias, por lo que se quedará así. Esto es útil ahora cuando comienzas tu nuevo sitio web Python. Así que acabamos de construir un sitio web jangle y lo podemos ver para que podamos iniciar la aplicación haciendo que Python administre, eso es PY Entonces ejecutamos ese archivo con Python y usando el argumento Ejecutar servidor. Ejecute que tengamos esta advertencia. Vamos a arreglarlo en un poco. Entonces este es el sitio web URLNow. Si presionas Control o Comando y luego haces clic ahí, eso abrirá tu nuevo sitio web. Así que en realidad no tiene una app y una app personalizada ahora porque vamos a añadir más tarde Pero básicamente, esto dice que está funcionando. Para evitar que la aplicación se ejecute, debe presionar Control C en el terminal. Y ahora, este mensaje aquí. Bueno, este mensaje está diciendo que necesitamos ejecutar algún comando SQL. Ahora bien, esto es algo bueno con jango porque realmente no tienes que ejecutar ningún lenguaje de consulta SQL Simplemente puedes hacer Python administrar PY migrar. Presiona eso y jangle ejecutará esas consultas por ti. Entonces básicamente, estas son consultas que crean algunas tablas predeterminadas, tablas de base de datos. También se puede ver que se creó un nuevo archivo dbdt S three cuando ejecutamos Python manage PY Migrate Entonces, lo que hizo ese comando fue creó un archivo de base de datos SQL, y Jango por defecto usa SQL tres, pero también puedes usar SQL postgrado Pero puedes hacer eso. Puedes hacerlo fácilmente en el servidor de producción. A nivel local, es bueno usar SQLite tres, que es solo un archivo y todos los datos estarán ahí, todas las tablas de tu proyecto estarán ahí Entonces ese comando generó ese archivo. Y también aplicó todos los cambios requeridos para la fase inicial de creación de JangOpject Entonces se crearon algunas tablas, y después, tal vez quieras hacer más cambios en tus tablas. Te voy a mostrar cómo creas nuevas tablas a través de jango no a través de SQL Entonces a través de Python, es muy fácil. Y una vez que creas una tabla en el código Python, tienes que ejecutar ese comando. Así que eso traducirá tu código Python en consultas SQL. Para que no tengas que escribir consultas SQL con jango. Solo tienes que escribir un código Python fácil. Te voy a mostrar cómo hacer eso cuando creamos la app más tarde. Por ahora, te puedo mostrar qué tablas se crearon dentro de este archivo. Si haces doble clic en él, no se mostrará porque el código de Visual Studio no muestra las bases de datos SQLite Se necesita un programa adecuado para ver esta base de datos. No hace falta que lo veas. Solo quiero demostrarte qué datos tiene esto dentro para fines de aprendizaje. Entonces tengo un programa aquí llamado DB Browser for SQL Light. Puedes buscarlo en Google e instalarlo o simplemente ver aquí qué es lo que voy a hacer. No necesitas este programa solo para ver los datos por curiosidad. Entonces quieres abrir la base de datos. Entonces ese es DB Sculi tres que tenemos el archivo. Y así ves que aquí hay varias mesas. Estas son tablas concernientes a la interfaz de administración, en realidad. Así que todavía no se están creando tablas para cosas como bloques u otras características que vamos a tener para nuestro proyecto jango Entonces las cosas en jango se guardan en bases de datos, y Jango usa culi tres por defecto, como te dije antes Cada una de estas tablas, por supuesto, tienen datos para que puedas ir a navegar por los datos y navegar por estas tablas. Por ahora, solo están vacíos porque ves, solo está vacío. Aún no hemos agregado ningún usuario a la interfaz de administración. Entonces, ¿qué es la interfaz de administración? ¿De todas formas? Bueno, déjame volver a iniciar el servidor. Ir a la página web. Y si vas a la URL, entonces después del puerto, haces slash, y luego Admin Entra, verás este cuadro de inicio de sesión aquí. Necesitas el nombre de usuario del administrador y la contraseña del administrador. Actualmente, aún no tenemos un usuario administrador creado. Por eso también ves que todas estas mesas están vacías. Entonces no datos. Entonces hay mesas, pero no hay filas en estas tablas. Entonces más adelante, te voy a mostrar cómo crear un usuario admin. Entonces, ¿por qué necesitamos la interfaz de administración de todos modos? Bueno, dijimos que vamos a construir un sitio web que contenga blogs. Ahora bien, ¿quién va a agregar contenido en estos blogs? ¿Eres tú el desarrollador o tal vez algunos autores los que escriben contenido? Entonces estos autores, hay dos formas de escribir ese contenido. O van a tu proyecto de código de visual studio, y luego les muestras los archivos Python donde está el contenido o los archivos HML, donde se escribirá el contenido o una forma más inteligente es tener una interfaz más amigable donde tengas estos cuadros de contenido y tengas opciones para cambiar las fuentes Entonces botones y cajas de herramientas y cosas así. Así que una experiencia real de procesamiento como Microsoft Word u otros procesadores de texto. Por lo que es fácil para los autores agregar contenido continuamente a ese sitio web. Entonces le das a esos autores ad me login nombre de usuario y una contraseña para que luego puedan ir a tu sitio web y agregar vamos a mirar la interfaz de administración en el siguiente video. Entonces eso es lo que teníamos por ahora. Gracias por seguir. Hablaré con usted más tarde. 209. Creación de un modelo de base de datos para la aplicación de blog: Hola otra vez. En este video, vamos a agregar algunos códigos a nuestros modelos ese archivo PY. Como te expliqué, una página una página web tiene un modelo, una vista y una plantilla de CML Entonces el modelo es más bajo en esta estructura de trío. Por lo tanto, vamos a comenzar con los modelos. Lo que necesitamos crear es una clase para representar una publicación de bloque. Entonces llamemos a esto una publicación. Ahora bien, el post no es una clase simple. Post debe ser una clase que hereda del módulo de modelos. Así que eso convierte a esta clase en una clase modelo. Entonces, el módulo es una clase específica que está diseñada por los autores jango, los desarrolladores de jango y está diseñada para contener campos de datos ¿A qué me refiero con eso? Bueno, por ejemplo, dijimos que queremos un campo de título. Una página web es un título. De modo que ese título, cuando el creador de contenido crea un título, ese título se almacenará en el campo de título de la tabla post. Entonces mostraste te mostré este DB Viewer, que es un programa para ver datos para ver los datos de una base de datos SQL. Entonces la base de datos SQL es esta de aquí, db Q tres, y esta publicación creará una nueva tabla en la base de datos db punto Sculi tres Ahora bien, estas son las tablas actualmente, así que no hay ninguna tabla de publicaciones aquí, pero verás que se creará una cuando completemos esta tabla. Entonces titulo ahora es modelos ¿Qué es un título? ¿Es un campo de atención? Sí. Creo que a este tipo le cabría un título. Entonces este es un tipo de campo de base de datos, y obtiene un atributo de longitud máxima. Digamos, 200 caracteres. Por lo que habrá un libro de texto que permitirá hasta 200 caracteres para el título del blog Entonces, ¿qué más tenemos? Contenido. Entonces el cuerpo de la cuadra. Ahora bien, aquí no iría con campo de cuidado porque eso está diseñado más para cosas para pequeños trozos de texto. Esto sería más como un campo de texto. Y puedes dejar eso vacío. ¿Qué más? Bueno, fecha, creado, tal vez deberíamos ser módulos punto fecha hora campo. Entonces ves que este módulo de modelos de jango tiene todos estos campos listos Entonces un campo de fecha y hora sería auto ahora agregar igual a true, lo que significa que cuando el creador de contenido estará creando una nueva publicación de bloque desde la interfaz de administración, por lo que estarán escribiendo un título, un contenido. Y luego habrá un botón de guardar ahí donde podrán presionar ese botón de guardar y la publicación estará en vivo. Cuando presionan, cuando el creador de contenido presiona ese botón, se instanciará esta clase y generará la fecha y hora actuales, y esa fecha y hora actuales se inyectarán campo de fecha creada de la tabla post en la base de datos db Suli three La base de datos tiene varias tablas, pos es una de las tablas, post tiene varios campos. Uno de los campos es ese. Bien, espero que eso tenga sentido. Entonces tenemos un campo slunk, que estará grabando la parte de la URL después del dominio Entonces como dijimos, si tu dominio es example.com y tu entrada de blog es sobre perros, entonces la babosa será Entonces la URL completa sería ejemplo.com barra diagonal DGS. Y aquí, el usuario, el creador de contenido, simplemente escribirá perro o donde quiera. Entonces el creador de contenido ingresará al slug en la interfaz de administración, igual que lo hacen con contenido del título y otras casillas de entrada ahí Entonces slug serían modelos de nuevo punto Slug field. Entonces hay una clase específica que representa el campo slug en jangle llamado campo slug Pongamos una longitud máxima de 200, tal vez. Tiene sentido no tener babosas muy largas. Por lo que esto no permitirá que el creador de contenido ingrese slugs de más de 200 caracteres. Y tiene que ser único, así que único equivale a verdad. Si admin, el creador de contenido entra en una escoria que se ha ingresado antes, eso no permitiría que se creara el nuevo slog porque no se pueden tener dos páginas con la misma URL Yo estropearía las cosas. Por lo tanto, este argumento no permite que se creen URL duplicadas Entonces tenemos al autor así que autor los módulos de nombre variable punto cuatro en clave esta vez. ¿Por qué? Porque vamos a obtener este valor de otra tabla de base de datos, que ya ha sido creada por Jango y podemos obtenerlo de jangodt De modelos de importación. Entonces a partir de esa importación, usuario, derecho. Esta es una clase también, se puede ver cuando coloco el ratón Y por lo tanto, en los dos argumentos aquí, necesitamos usuario. Sin el paréntesis Entonces, básicamente, un tipo de campo de clave externa significa que el valor de este campo de base de datos vendrá de otra tabla de base de datos. En este caso es una tabla de base de datos de usuarios. Y este campo creará en la interfaz de administración una lista desplegable donde el creador de contenido puede elegir entre diferentes nombres de usuario. Por lo que sucede de forma automática. Pero queremos especificar algunos parámetros sobre eliminar el comportamiento que sucederá cuando se elimine al usuario. Por lo que este usuario se elimina de la tabla de base de datos original. Entonces cascada, pero no necesitas esto, así que borra eso y simplemente déjalo así. Ahora bien, ¿qué significa esto? Bueno, esto significa que si se elimina a un usuario de la tabla de la base de datos de usuarios, también se eliminarán las publicaciones del usuario. Esto es lo que hace cascada. Eliminaré esta coma aquí, y el último campo que queremos agregar es status, el status de la publicación, que sería igual a los modelos de ese campo entero En la interfaz de administración, habrá una lista desplegable de estado que contendrá dos opciones Redactar y publicar. Por lo que el creador de contenido podría optar guardar ese artículo ya sea como borrador o como publicado. Entonces esto facilitaría a los creadores de contenido organizar blogs porque podrían guardar un artículo como borrador y luego en nuestro jangle podríamos condicionar no publicar dichos artículos que tengan el estatus de borrador, sino que solo publiquen aquellos que tengan el estatus como publicados Por lo que esta sería una buena manera de distinguir entre los dos tipos de artículos de publicaciones. Entonces tenemos que tener opciones, que es igual a una variable, digamos, status y ¿qué es status? Bueno, el estatus tiene que ser una variable que tenemos que crear aquí. Entonces estatus igual a un derrumbe de dos topples. Una sería, digamos, cero trougt. El otro sería uno publicar. Y el predeterminado sería quizá draft. Entonces cero significa borrador, y uno sería para publicar. Ahora, el administrador, el creador de contenido verá ya sea borrador o publicación en esa lista desplegable, y eso completa nuestro post de clase Ahora, asegúrate de guardar este archivo, guardar archivo o Command S o Control S, y luego necesitas hacer algo aquí. Necesitamos aplicar ese modelo a nuestra base de datos. Así que tenemos que ejecutar algunas consultas SQL. Pero como he mencionado antes, no es necesario ejecutar consultas SQL explícitamente. Todo lo que tienes que hacer es ejecutar dos comandos, Python Manage dot PI hacer migraciones así que actualmente, si le echas un vistazo al programa navegador DB donde vemos los datos, no tenemos ninguna tabla llamada posts por ahora, aunque refresque esta actualización, no hay tales tablas Pero ahora mira qué va a pasar si ejecuto este comando. Bien, algo pasa aquí, se aplicaron migraciones, así se cambió la estructura de la base de datos, y luego necesitamos agregar otro comando, que es que Python administra punto PY, migrar esta vez Entonces esa y esa aplicamos consultas SQUAR correspondientes a este modelo Ahora bien, si voy a aquí, refrescar verás que esta tabla ha sido agregada post bloque. Entonces el nombre de esta tabla se construyó usando el nombre de la aplicación que es block, y underscore, Sol Jango lo hace automáticamente, y luego después del guión bajo, post, que es el nombre del módulo Entonces si selecciono esa tabla, verá ahora que tenemos estos campos de base de datos. Entonces aquí vemos todos los campos que creamos. ID es un campo que se crea automáticamente, pero tenemos contenido de título, fecha de creación, estado de slog e ID de autor. Derecha. Eso completa la creación de nuestro modelo. Ahora necesitamos crear una vista. Hagámoslo en el siguiente video. 210. Vistas en Djago: Hola. Anteriormente, creamos una plantilla HTML, que es básicamente responsable renderizar el contenido en el navegador. Pero esta plantilla HTML debería estar conectada de alguna manera con los modelos que es archivo PY. Esta plantilla HML, tiene algunas variables que están a la espera de ser llenadas de contenido con valores Por lo que el título tiene que venir de la base de datos, de la base de datos SQL, que es este archivo de aquí. Por lo tanto, tenemos que encontrar una manera de conectar plantilla con esa base de datos. Y como en Python, este post de clase es el representante de esa tabla de base de datos, por lo tanto, necesitamos conectar Bloquear ese HTML con este post de clase. Yo es donde la visión de los intermediarios viene muy bien. Entonces vamos en vistas y creamos una vista. Llamemos a esto vista de bloque. Puedes llamarlo donde quieras. Esto es sólo un nombre para la clase. Pero quiero distinguir este nombre de las otras clases para que sea más fácil para ti entender las cosas. Así vista de bloque de clase. Es una clase muy sencilla, en realidad. Debería obtener una variable de modelo. Entonces Jango espera de esta clase tener una variable de modelo, y esta variable de modelo debe apuntar al nombre sobre el módulo que debe estar conectado al bloque Entonces básicamente, tenemos, de nuevo, una variable de módulo y también una plantilla. Variable de nombre. Entonces esto es lo que hace esta clase. Eso es todo. Conecta el modelo a la plantilla. El modelo será post, pero post no es un nombre importado en este espacio de nombres, así que necesitamos importarlo de modelos, importar post. Ves ahora la publicación está disponible. Por lo tanto, ahora esta línea es válida. Y nombre de plantilla, todo lo que tienes que hacer es simplemente dar nombre sobre plantilla, que es blog dot HTML. Y eso es todo. Bien, hasta ahora tan bien. Entonces si ejecutamos el servidor ahora con Python administramos ese servidor PY Run, pero ten cuidado. Aquí no estoy en un entorno virtual, así que cierra eso y abre una nueva terminal y vuelve a hacer Python administrar ese servidor PY Run. Y a veces se obtienen errores como este de aquí, plantillas querido OS no está definido en la configuración. Así que ve a la configuración, solo estamos aquí, y necesitamos obviamente OS la biblioteca estándar del sistema operativo, que realiza operaciones de directorio con carpetas y archivos. Así que necesitábamos eso cuando declaramos las templates dear variable previamente aquí. Guarde el archivo y vuelva a ejecutarlo. Esta vez, el servidor arrancó. Entonces esta es la página de inicio, pero no hay otras páginas web que no sean ésta. Por ejemplo, si vas a Perros, obtienes un error porque o perros o gatos. Por supuesto, no tenemos nada porque no tenemos entradas en nuestra tabla de bloques en la base de datos. Lo que voy a hacer en el siguiente video es que voy a introducir algunos datos ficticio en nuestra tabla de base de datos a través de un programa llamado navegador DB para SQL Light Si no tienes este programa o no quieres instalarlo, está bien porque este programa es simplemente opcional, pero puedes instalarlo gratis, o puedes buscarlo en Google. Normalmente, queremos ingresar los datos a través de Admin, pero solo para probar las cosas, quiero tener rápidamente algunos datos ahora para que te explique lo que está pasando, y entiendas cómo están funcionando las cosas. Entonces nos vemos en el siguiente video. 211. Patrones de URL: Hola. Anteriormente, creamos una vista que es una clase que conecta el modelo con una plantilla. Ahora, en este video, quiero ingresar algunos datos ficticios en nuestra tabla de base Así que nuestro archivo de base de datos es DQ tres, y tiene varias tablas en su interior Quiero usar el navegador DB para SQLite y luego ir a abrir base Y luego este es un directorio raíz y ve a db cul tres y haz doble clic ahí Entonces quieres ir a navegar por los datos y encontrar la tabla de entradas del blog. Entonces estos son los campos de la tabla de la base de datos. Quieres expandirlos un poco para hacerlos más visibles y fechas creadas, estado slug del post, así borrador o publicado, y el ID de autor, que podría ser un número Entonces el primer autor que se creará tiene una idea de uno y así sucesivamente. Así que vamos a introducir manualmente una nueva fila de tabla. Por supuesto, como te dije, esto se debe ingresar a través de la interfaz de administración. Pero por ahora, solo para probar, queremos ir a este botón, presionar eso, y eso insertará una nueva fila de tabla. Por lo que el ID se generó automáticamente. Entonces para la primera fila, será una. Para el segundo, se auto incrementará dos. Dos y así uno. Entonces pongamos algo para el título como perros y contenido. Los perros son buenos. Eso es suficiente por ahora. Fecha de creación. Esto debería ser en formato como 2022, 12 para el mes, diez para el día del mes, babosa Así. Perros y selva se encargarán de construir la URL completa. Entonces example.com, agregará un slash y luego agregará al perro después del Estado, éste fue borrador o publicado. Entonces aquí adentro, ya ves que tenemos cero o unos. Entonces pongamos uno para el ID de autor publicado, el primer usuario de la base de datos, sí creamos ya un súper usuario. Para que ese usuario tenga el ID uno. Derecha. Una vez que hayas hecho eso, quieres ir a escribir cambios en el archivo de base de datos. Bien, y entonces puedes simplemente cerrar la base de datos, y la fila está ahí. Ahora, conectemos ese slug esa URL a nuestra vista de bloque de vistas Para ello, debes ir a tu carpeta de bloques y hacer clic derecho e ir a Nuevo Archivo y crear una URL de archivo l punto py. Y aquí, quieres importar desde la ubicación actual importar vistas. Entonces estamos importando el módulo views. Es un archivo, pero cuando importas cosas que es un módulo, se convierte en un módulo. Así es como lo llamamos. Vistas ahora está disponible aquí, y también necesitamos importar algo más de Jango URL, un módulo, URL es otro módulo de jangoimport Y necesitamos esta ruta ahora, que es una función para crear una lista de patrones de URL URL. Así que estoy dividiendo eso porque esto puede contener diferentes patrones de URL. Entonces el primer patrón que nos interesa se crea a través de la función path. Entonces, ¿cuál es el patrón? Bueno, es babosa, una columna, y babosa otra vez, con este soporte de apertura y cierre Entonces, cuando el usuario visita una determinada URL, digamos, déjeme anotar algo aquí. Por ejemplo, ejemplo.com Slug, claro, escriben como perros, pero perros, estamos diciendo a Jango que busque perros en Entonces jango irá a nuestra tabla de base de datos de tabla, y buscará en cada fila perros en cada celda de babosa, Entonces en cada fila del campo de babosas, buscará perros Y si encuentra una fila que tenga perros, va a Ejecutar vista de bloque, eliminar el paréntesis, Block Vew punto como Así que ejecuta esa clase como una vista. Y también hay algo más que tenemos que dar aquí, que usaremos más adelante. Es un nombre. Que es lo que debería ser una cadena, y digamos vista de bloque. Este es un nombre que quizás necesitemos más adelante, así que es una buena idea tenerlo aquí ahora. Entonces espero que estés siguiendo hasta el momento. También tenemos que hacer otra cosa con respecto a las URL. Ves que hay otra URL que es archivo PY, pero está dentro de mi sitio, que contiene las configuraciones del proyecto jungla, no las aplicaciones jungo Entonces este archivo se ve así ya. Es construido por jango automáticamente, y aquí está esta aquí también hay una variable de patrones de URL, igual que esta de aquí, patrones de URL, patrones de URL Pero esto ahora quiere saber sobre las URL de la app de bloques Entonces, con cada aplicación que crees, quieres declarar el patrón de URL aquí. Entonces después de la coma, creamos otro elemento de lista, que es path esta vez, tiene que ser así Entonces una cadena vacía que denota el directorio home. Entonces cuando se visita el directorio home, y luego algo más después de la barra diagonal es escrito por el usuario en la barra de direcciones del navegador, y algo más es definido por los blogs Blog es el nombre de la aplicación. Así que bloquea ese nombre de carpeta viene aquí, URL. URL es el nombre de la URL Pyfleo la aplicación de bloque. Entonces blog punto URL. También podrías escribir algo más aquí. Podrías escribir MyBlocks, por ejemplo, en ese caso, Jango estaría esperando usuarios No example.com slash Dogs, pero example.com slash MyBlocksSlash pero example.com Pero eso no queremos, así que mantengámoslo así. Ejemplo.COM slash DOG. Ahora nos sale este error. Incluir no está definido, y necesitamos ingresarlo desde Jungle URLs import Path e include Guardar. También asegúrate de guardar todos los archivos. Así que guarda esto también. Controla, guarda las vistas también. Entonces todo lo que ves con ese código negro.in de Visual Studio, eso significa que aún no se ha guardado. Ahora, veamos qué errores obtenemos type object block view no tiene atributo como view, mira lo que está pasando aquí. Esto sucede en este archivo, así que USPI bloquea la barra URL PY, que está aquí Entonces esta clase no tiene ese atributo. Echemos un vistazo. Esta clase, por supuesto, no tiene ese atributo. Solo tiene atributos de nombre de modelo y plantilla. Ningún método llamado como vista. Eso es porque olvidé heredar de una clase de vista especializada que necesitamos importar Desde jango así desde jangle dot Vs Import generic, y luego desde generic, podemos acceder a la vista de detalle detalle, no eliminar view detailed view class Así que borra el paréntesis. Entonces eso significa que esta clase en realidad tiene un método a view dentro. Para que puedas hacer clic derecho e ir a Definición. Y claro, esto no tiene ningún método aquí, pero hereda de algunos otros métodos Entonces, si vamos a vista de detalle base, vamos a definición, esto también está heredando de estos dos Entonces tal vez la vista tiene que una función de vista. Sí, lo encontramos. Entonces ese es el método. Entonces hay una cadena de herencia, y ahora tenemos acceso a ese método desde nuestra clase de vista de blog. Derecha. Guarde este archivo. Y ahora es el momento de probar nuestra app y quieres ir a esta URL, así que esto es de esperar. Por lo que la página de inicio aún no está configurada. No tenemos ningún patrón de URL que diga a jangle qué hacer cuando la gente visita la página de inicio Entonces, lo que deberías buscar en cambio es uno de tus bloques. Por lo que actualmente tenemos perros, los perros escoria. ¿Te acuerdas de eso? Lo inserté en la tabla, y nos sale este error. La plantilla no existe. Un error fácil de corregir en perros. Entonces Jango reconoció que sí tenemos una entrada de perro en la base de datos porque si la probaste para gatos, obtendrías otro error Así que esta vez obtendrías página no encontrada, y Jango probó estos patrones y no encontró ninguna babosa para gatos Entonces los perros es una cosa diferente, pero no se encuentra la plantilla. Así blog punto HTML. Esto suele ser un problema falta de comunicación con jangle Entonces Jango no está siendo capaz de encontrar la ruta del HTML de punto en bloque Así que vamos a comprobar. Block dot HTML es correcto aquí. Entonces la vista tiene el nombre correctamente, y luego veamos la configuración. Plantillas. El nombre es correcto aquí. Entonces esto se ve bien, pero si te desplazas hacia arriba aquí, tienes la variable templates. Y esto ahora tiene algunos parámetros sobre las plantillas. Y uno de estos parámetros es DRS. Entonces estas son claves de ese diccionario. Curva Derski. El DrSki espera un valor, y actualmente es una lista vacía, pero hay que declarar aquí la lista de directorios de plantillas Entonces en este caso, solo tenemos uno porque podrías tener más, pero tenemos uno, así que tenemos que declarar que en el guardado y obtenemos esta otra plantilla de error ciervo no está definida, claro, porque la estamos usando aquí antes de definirla. Así que corta eso de ahí y ponlo por encima de su uso. Entonces por encima de esta variable de plantillas, afuera ponla justo aquí. Seguro. Y nuestro servidor fue interrumpido, así que queremos ejecutar de nuevo. Python administra ese servidor PY Run. Veamos qué obtenemos esta vez. Vaya al navegador. Y whoop, conseguimos el bloqueo. Perros, Los perros son buenos y editan el nombre del autor. Está funcionando bien. Entonces con eso concluye este video. Así que déjame envolverlo para que sepas dónde estás parado hasta ahora, somos capaces de abordar las preocupaciones de URL del usuario. Entonces, cuando ingresan example.com barra TOC, por ejemplo, se está activando este punto URL PY y esto despliega las vistas y los módulos Por lo que conecta los dos juntos para consultar datos de la base de datos. Esos datos se inyectan en estas variables con corchetes en la plantilla HTML. Y claro, entonces estos se renderizan en el navegador para el usuario. Y como viste esta vez por ahora, acabo de ingresar algunos datos manualmente usando un programa de terceros que accede a SQL tres bases de datos. Pero normalmente, como ves en los próximos videos, queremos obtener datos a través de una interfaz de administración. Entonces esto es lo que vamos a hacer a continuación. Vamos a crear la interfaz de administración e introducir algunos datos ahí dentro. 212. Creación de vistas de la interfaz de administración: Bienvenido de nuevo. Anteriormente, pudimos construir esta página web con Jango y en este video, vamos a trabajar en la interfaz de administración En concreto, vamos a agregar una opción para poder agregar entradas de blog desde la interfaz de administración. Entonces para eso, necesitas tener un nombre de usuario y contraseña. Recuerda, eso lo creamos anteriormente, pero si te pierdes eso, puedes seguir adelante y crearlo ahora con el comando Python. Administrar punto PY, crear superusuario. Ya lo hice, así que no voy a volver a hacerlo. Por lo tanto, voy a ejecutar el servidor e ir a la interfaz de administración e iniciar sesión con mis credenciales. Ahora, ves que aquí solo somos capaces de crear nuevos usuarios y nuevos grupos, pero no posts. Entonces lo que tenemos que hacer es que tenemos que ir al código y luego ir al blog, y luego ir a admin PY. Entonces ahora queremos crear un modelo. Aquí, queremos registrar nuestros modelos, que es el post modelo en modelos PY. Entonces este de aquí, queremos importar eso desde Admin PY así desde ese post de importación de modelos. Entonces queremos registrar eso usando admin ese sitio que es registrarse con letras minúsculas, y luego aquí va post. Sin los paréntesis, así que no llames a post, solo declaralo ahí Guarda este archivo y ve y revisa la interfaz de administración. Así que refrescar, y deberías ver las publicaciones aquí ahora. Entonces, si haces clic en AD, agrega el título. Digamos Gatos Los gatos también son buenos. La babosa podría ser CATs o donde quieras. Ardits al autor y hazlo publicar. Así que ya ves, estos son todos los campos de modelos que es PY titulado content slog, author y status Así redactar o publicar. Haga clic en Guardar. Entonces ve al navegador y ve a GATOS esta vez, y ya ves que el nuevo post está justo aquí, tan fácil como eso. Ahora bien, esto es opcional, pero si lo deseas, puedes agregar algunas columnas aquí para agregar algunos detalles sobre estas publicaciones. Por lo que los creadores de contenido verán esta vista cuando creen publicaciones. Por lo que deberías hacer su trabajo más fácil para que puedan encontrar nuevos bloques en este lugar aquí. En primer lugar, lo que queremos hacer es ver el nombre de cada blog es post objeto uno, post objeto dos. Eso hace que sea muy difícil encontrar otro el post que quieras para el creador de contenido. Entonces, ¿cómo podemos mostrar aquí el título en lugar de este nombre poco útil Pero antes que nada, ¿de dónde viene esto? ¿Qué opinas post objeto? Me parece que Post post es el nombre de la clase modelos. Entonces este en realidad es el nombre de esa clase. Entonces Python, cuando tienes una clase y solo la imprimes, imprime esa clase, Python simplemente imprimirá el nombre de esa clase. Supongo que ya lo sabes. Déjame mostrártelo a lo que me refiero. Entonces déjame abrir un shell Python, y tienes una clase. Llamemos también a este post. Sólo pasa. Entonces cuando imprimes post, obtienes este tipo de salidas o simplemente dices post, lo mismo. Entonces Jango está tratando de obtener una representación de cadena de esta publicación de clase Pero podemos cambiar eso agregando un método mágico. Llamado STR. En realidad, es subrayado, STR, subrayado, subrayado. Así que dobles guiones bajos iniciales y finales. Con paréntesis, self viene como el primer argumento, columna, y esto debería devolver ahora una mejor representación de esta clase, que sería self representa una clase en sí misma, y title es atributo de la clase Este título se imprimirá cuando se imprima la pose. Entonces si guardo esto voy a admin. Refrescar. Obtenemos los títulos de cada una de las entradas del blog, gatos y perros. Ahora bien, si quieres agregar algo más de contenido aquí en el lateral, lo que querrías hacer es ir a admin, y aquí quieres crear una nueva clase. Llamemos a esta clase post admin, que debería heredar de admin Model Admin Entonces esto es que no necesita ningún argumento. Model admin es un tipo de clase, igual que tenemos modelos que modelan para modelos de clase normal. Tenemos modelos de administración especiales, así que heredamos de eso, y esto espera ahora una variable de visualización de lista si quieres pasar eso, que debería estar atuple con cadenas, y las cadenas deberían ser los nombres de los campos del Entonces, ¿qué quieres mostrar ahí al costado? Aquí. Ya tenemos el título, así que vamos a mostrar las fechas creadas y el autor. Sí. Hagámoslo. Así fecha de creación. Ese es el nombre. Sí, fechas creadas y autor en Admint PY autor. No. Bien, lo hicimos, pero esto es solo una clase flotando por ahí. Jango no sabe de esta clase. Entonces queremos decirle a Jango de alguna manera que Jango el proyecto tiene que considerar esta clase, así que necesitamos registrar esa Eso es lo que estoy tratando de decir. Así que post admin ahí, solo la clase. No hace falta llamarlo así. Haga algo de espacio ahí para la visibilidad y ahorre y vaya aquí y recargue Y esta es la visión que obtenemos. Entonces sé que no es lo ideal, pero lo arreglaré. La fecha en que se creó el post y autor. Entonces el título desapareció porque cuando incluyas esta variable de visualización de lista, entonces la interfaz de administración ignorará el nombre de la clase por lo que no imprimirá la representación de clase aquí, sino que imprimirá lo que declaraste aquí. Por lo tanto, lo que hay que hacer es agregar título entre estos como el primero. Entonces el orden de las cuerdas aquí es respetado por jango. Entonces ahora obtenemos título, fecha de creación y autor. Si te preguntas por qué la fecha creada para perros está vacía, bueno, eso es porque si recuerdas, ingresé manualmente un RO para los perros. Entrada de blog, y obviamente no ingresé el formato de fecha correcto manualmente. Por eso Jango no sabe qué exhibir aquí. Pero cuando creas una publicación, la manera correcta a través de la interfaz de administración, Jango es capaz de generar automáticamente la fecha actual, eso es todo para este video A continuación, cuidemos la página de inicio porque actualmente no existe. Construyamos la página de inicio en el siguiente video. Ver aquí. 213. Crear la página de inicio: Hola, bienvenido de nuevo. Anteriormente, creamos dos entradas de blog, gatos y perros. Sin embargo, nuestra página de inicio no está funcionando. Entonces, ¿cómo agregamos una página de inicio? Hagámoslo en este video. Por ahora, vamos a mantener las cosas simples. Vamos a tener solo una página de inicio que diga que esta es una página de inicio. Pero más adelante vamos a generar automáticamente una lista de entradas de blog en la página principal. Por ahora, vamos a tener una página HTML simple que practiques la creación de nuevas páginas en la jungla. Oh, ya sabes más o menos cómo funcionan las cosas ahora, pero vamos a repetirlo. Entonces, ¿por dónde empezamos? Empezamos por crear un módulo o una vista o una plantilla HTML, por lo que aún puede estar confundido acerca de por dónde empezar. Pero te sugiero que sigas este enfoque. Siempre piensa en el usuario. Entonces resuelve el problema empezando por el usuario. Lo que ve el usuario es el HTML. Después bajas en niveles hasta llegar al back end, que son los modelos o las vistas. Entonces comencemos a construir la página pensando en el usuario. Por lo tanto, es necesario crear una plantilla HTML para mostrarla al usuario. Así que ve a las plantillas y haz clic derecho sobre y ve a Newfle y luego generalmente la página de inicio se llama index dot HTML Esta es una forma estándar, pero también puedes escribir cualquier otro nombre que te guste. Así que voy a mantener índice punto HTML. De nuevo, el Tok entonces tienes etiquetas HTML y las etiquetas body así. Escribamos algo de texto estático aquí. Esta es la página principal. Pero, ¿cómo puede el usuario obtener esta plantilla HML? ¿Qué hacen? Bueno, ingresan una URL directamente en su navegador. O sea, también podrían encontrar esa URL en Google o introducirla directamente en su navegador. No nos importa, pero tienen que introducir una URL de alguna manera en su navegador, que sería como example.com. Esa es una página de inicio. Entonces tenemos que ir a las URL de nuestra app de blog. Entonces esta URL, esa es PyFle no la URL, eso es PY fle fuera Ya terminamos con eso. Entramos. Le contamos a Jango sobre la URL, eso es PyIL de nuestra app, y eso es todo. Cerramos eso ahora y trabajamos en la URL de la app. Entonces la URL del blog, que tiene esta lista de llamadas a la función Path. Entonces esta función está siendo llamada con dos argumentos, uno aquí, uno aquí, tres, en realidad, y un tercero aquí dentro. Entonces ahora necesitamos agregar otra llamada. Sendero. Esta vez es solo una cadena vacía. Antes, después del nombre de dominio, teníamos la babosa. Pero ahora después del nombre de dominio, no tenemos nada. Así que solo déjalo ahí una cadena vacía. Una coma Oh, ahora tenemos puntos de vista. ¿Bien? Entonces nos estamos moviendo hacia nuestra hoja de ruta de tener una página publicada Así vistas, queremos crear otra vista ahora en vistas PY. Así que vamos a escribirlo primero aquí. Vamos a llamarlo home view. Entonces homeview dots view será el método de eso. Entonces tenemos que llamar aview. Vamos a darle un nombre, así que tal vez lo usemos después. Vista de subrayado de inicio, una cadena, ¿verdad? Y luego crear una vista. Entonces una nueva clase. La vista de la casa de clase viene de la vista de detalle genérica. En realidad, no debería venir de esto, pero dejémoslo así por ahora. Y el modelo ahora. Bueno, esta página en realidad no tiene modelo. No necesita un modelo en realidad, porque ver, esto es solo una página estática. No es obtener datos de una base de datos como HTML de punto de bloque. Verás, en el blog HML, obtenemos estos datos de la base de Este no es el caso aquí, por lo que puedes tener vistas sin modelos. Entonces todo lo que quieres hacer aquí es nombre de la plantilla igual a casa, lo siento índice punto HTML. Entonces esa es una que significa que cuando los usuarios visitan esta URL, esta vista llamará esa plantilla para ser renderizada en el navegador en el navegador del usuario. Eso es. Asegúrate de guardar, usa ese PY, asegúrate de guardar URL PY, asegúrate de guardar el índice de punto HTML. Y después prueba la página. Entonces esta es la página principal, y parece que tiene un problema. Así que ahora están surgiendo problemas. Dice que a la vista de inicio le falta un conjunto de consultas. Por lo que es necesario definir el modelo home view. El problema aquí es que en las vistas, este no es el tipo de vista correcto para usar con vistas que simplemente renderizan una plantilla sin obtener datos de un modelo. Por lo tanto, en este caso, lo que se quiere utilizar en su lugar es una vista de plantilla. Guardar y actualizar. Y esta es la página principal. Está funcionando. Se puede ver a medida que lo acerco. Derecha. Entonces así es como puedes agregar más páginas. Y ahora también puedes entender la diferencia entre diferentes tipos de vista. Así vista de detalle y vista de plantilla. vista de plantilla significa cuando solo necesitas renderizar una plantilla sin obtener datos de mi modelo, y esta es una vista más compleja que obtiene datos de modelos y los pasa a plantillas. En el siguiente video, te voy a mostrar cómo usar otro tipo de vista más, que básicamente se usa para crear una lista de objetos, una lista de entradas de blog en nuestro caso. Habla contigo en el siguiente video. 214. Crear la página Acerca de: Anteriormente, construimos una página de inicio para nuestra aplicación. Ahora queremos desarrollar esa página de inicio y mostrar la lista de publicaciones de blog en la página principal en lugar de alguna información estática. Entonces antes de usar vista detallada para páginas de blog, vista de plantilla para la página de índice, ahora queremos usar otro tipo de vista para mostrar una lista de blogs. La vista de plantilla no es la mejor opción para esto. Por lo tanto, podemos eliminar esto o podemos conservarlo y usarlo para sobre nosotros página. Digamos que nuestro sitio web debe tener una página sobre nosotros donde pueda escribir alguna información sobre la empresa o usted mismo. Entonces veamos cómo podemos cambiar eso. Empecemos desde el índice, la página HML y cambiemos el nombre a aproximadamente luego en vistas, queremos renombrar índice a aproximadamente para reflejar el nombre de la plantilla HTML, y también home view tal vez cambiar a about view y luego ir a l punto py y cambiar home view a about view eliminar esos paréntesis y home view about view about view Y ahora queremos darle otro patrón de URL a esa página sobre nosotros. Deberíamos estar a punto de slash así. Guardar URL que es PY, guardar vistas que es PY, y eso está alrededor del servidor. Oh, no estoy en un entorno virtual, así que cierra la terminal y abre una nueva y luego la tecla de flecha superior para ejecutar ese servidor nuevamente. Entonces la página de inicio ahora ya no es válida, pero sobre terminar con un slash es válido Por lo que debería terminar con un slash. De lo contrario, se obtiene un error. Pero esta página es válida ahora. Entonces esta página, digamos que esta es la página acerca de. Correcto, guarda eso, actualiza, y vemos el cambio. Entonces eso se trata de agregar otra página más. En el siguiente video, sigamos adelante y hagamos de nuevo la página HML del punto índice con nuevos contenidos Entonces mostrándote una lista de blogs. 215. Cómo publicar publicaciones de blog en la página de inicio: Hola. En este video, vamos a agregar la página de inicio y mostrar una lista de publicaciones de blog en esa página de inicio. Entonces comencemos de nuevo desde el punto de vista del usuario. Entonces queremos tener para el usuario un índice que plantilla HTML con un doctype HTML tags y body tags Entonces, ¿qué ponemos aquí? Bueno, entonces etiquetas con corchetes y símbolos porcentuales, y luego esta vez, lo que hacemos es un bucle de cuatro, cuatro post en lista de correos. Y luego hacemos algo aquí, y luego terminamos ese bucle y cuatro adentro aquí, hacemos otra cosa. Te explicaré qué es la lista de publicaciones y qué publicación también es. Pero básicamente, entonces tenemos las variables aquí, que podrían ser post title y post content. Y tal vez No, publicar contenido sería demasiado para mostrar, pero podríamos decir autor. Entonces esta será sólo una lista de bloques. No queremos mostrar el contenido en esa lista porque sería demasiado. Así post title post author. Ahora bien, ¿qué es la lista de publicaciones? Publicar lista es una vista, que necesitamos definir en las vistas que PY. Entonces otra clase de vista más. Lista de puestos de clase, el nombre tiene que estar en el mismo formato, por así decirlo, como este de aquí. Usamos la lista de subrayados de publicación aquí con letras minúsculas Ahora necesitamos usar post en camello las listas de casos de P y L son mayúsculas Eso hereda de la vista de lista de puntos genéricos. Entonces este es otro tipo de vista más. Teníamos vista detallada para renderizar plantillas HTML que obtienen datos de un módulo. Teníamos una vista de plantilla para renderizar plantillas HTML sin datos de un modelo, y tenemos esta vista de lista, que está especializada en renderizar múltiples filas de datos, en este caso, múltiples publicaciones. Ahora, este tipo de clase espera una variable de conjunto de consultas, que debería ser igual a Post. Post es el modelo. Así que ten cuidado aquí. No es la vista. No es vista de blog. No se trata de ver, claro, es el modelo de blogs, que puedes encontrar dentro de modelos en PY. Entonces post ese modelo es el que nos referimos aquí. Lo que estamos tratando de hacer aquí es que estamos tratando de consultar los objetos. Entonces las filas de ese módulo post. Sin el paréntesis, queremos aplicar un filtro y tal vez obtener todos los objetos, tal vez aplicar un filtro como status igual a uno, que significa Déjame mostrártelo. Entonces status, estamos hablando de este campo. Entonces queremos esas publicaciones, esas entradas de blog, que tienen un valor de uno por estatus. El estado tiene ceros o unos. Entonces uno significa publicar, cero significa borrador. Por lo que queremos mostrar allí solo aquellos posts que se publican un valor de estado de uno. ¿Y tal vez quieres ordenarlos por qué campo? Entonces tenemos fecha creada, quizás. Así fecha de creación. Entonces esa es la relación con los módulos y la relación con las plantillas ahora es plantillas Nombre Águila dos índice punto HTML, ¿verdad? Entonces construimos la plantilla, que se ve así. Construimos la vista, pero tenemos que hacer algo con la URL también. Entonces tenemos un artículo aquí, dos artículos aquí. Necesitamos una coma aquí y agregar un tercer ítem, que es la página principal Entonces una cadena vacía. Y queremos obtener de las vistas que queremos obtener pero el post list view, post list. La lista de publicaciones es una clase, así que queremos obtenerla como una vista. Entonces llama al método como vista desde la lista de publicaciones y dale un nombre como ¿quién? Ahora creo que estamos listos para probar el navegador e ir a visitar la página principal. Pero primero, asegúrate de guardar todo. Esta, la URL que PyFle, el índice de ese archivo HTML, y las vistas que Guarde esos y vea si la aplicación se está ejecutando, se está ejecutando. Así que visita la página de inicio y está funcionando. Entonces los perros, lo hicieron, los gatos, lo hicieron. Sí, estas son las dos entradas de blog. No muy atractivo, pero puedes cambiar eso con algo de HTML. Por ejemplo, es posible que desee poner el título dentro de H dos etiquetas aquí. Y el autor, quizá en etiquetas P. Entonces aquí dentro. Di recargas y se ve un poco mejor Ahora el orden de esto es que las publicaciones más antiguas estén en la parte superior y las publicaciones más nuevas estén al final. Entonces, si quieres cambiar eso, es muy fácil de hacer. Simplemente pasa a las vistas que PY y quieres cambiar el conjunto de consultas, el orden simplemente agregando un menos así que esta es la sintaxis jango, y luego actualizar, y Kats estará en la cima ahora, la publicación de bloque más reciente Entonces esto se ve bien, pero creo que aquí faltan dos cosas. Una es que cada uno de estos debe tener un enlace el que el usuario pueda hacer clic e ir a esa publicación de bloque en particular. Y segundo, lo que falta aquí es algo de estilismo. Entonces esto se ve bastante horrible. Necesitamos aplicar un poco de estilo, y vamos a usar bootstrap para eso. Que es una biblioteca CSS, y solo hace cosas. Así que las páginas web se ven mucho mejor. Entonces, a continuación, vamos a agregar una URL aquí, que tiene que ver con las etiquetas URL, así que vas a aprender a usar las etiquetas URL, y luego a continuación agregamos un poco de estilo bootstrap. Nos vemos. 216. Cómo agregar Bootstrap a Django: Hola, bienvenido de nuevo. En este video, vas a aprender a pasar de esto a esto. Así que vamos a agregar algunos estilos CSS usando la biblioteca bootstrap, que es una biblioteca CSS. Bootstrap hace que sea fácil estilizar tus documentos HTML, y hoy en día, es imprescindible tener un sitio web de aspecto moderno Así que vamos a donde lo dejamos con nuestro código. Este es el índice de ese documento HTML que representa esta página web, y este es un documento con el que vamos a trabajar en esta conferencia. La forma en que vamos a hacer esto es mirando la documentación de bootstrap. Así que intenta con Google bootstrap, y el primer resultado debería ser la página web oficial de bootstrap. Entonces unas palabras sobre bootstrap. Ya sabes, CSS es algo que generalmente se coloca en algún lugar de una carpeta a la que llamarás static. Entonces creas una carpeta en el directorio del proyecto en el directorio raíz, y lo nombras estática. Y dentro de la estática, normalmente se crea un archivo como main dot CSS. Y en ese archivo, escribes algún código CSS. Ese código CSS, básicamente, se ve así. Digamos P y luego tienes algunos corchetes así, y luego dices color azul, por ejemplo, y luego tamaño de fuente 17 píxeles. Eso sería CSS. Por supuesto, se colocaría dentro de un archivo CSS como dije. Aunque también hay una manera de simplemente poner este código, integrarlo en el documento HTML. De cualquier manera, hace lo mismo. Lo que hace es que este código, por ejemplo, obtenemos todas las etiquetas P y las colorea en azul en azul. Entonces el texto será azul y el tamaño de fuente del texto será de 17 píxeles, y así sucesivamente, tienes otras propiedades como esa. Ahora, cuando usamos bootstrap, lo que estamos haciendo es que estamos usando código que ya está escrito. Entonces estoy hablando de código CSS otra vez. Entonces la biblioteca tiene código CSS, y luego solo usas ese código solo hacer referencia a algo llamado una clase. Por ejemplo, si quisieras usar y nosotros usaremos bootstrap, en lugar de hacerlo, dirías clase igual a P bonita. Por ejemplo, digamos que este párrafo, este código también tendría algo un nombre en alguna parte. Entonces digamos P bonita. Entonces esto es lo que estaría dentro esos archivos bootstrap que instalamos. Y luego en nuestro código, solo tenemos que referirnos a esa clase de bootstrap para aplicar esos atributos a este párrafo, que en este caso, sería el nombre del autor. Entonces lo verás en acción. Permítanme borrar eso y eso también. Derecha. Y volvamos al sitio web de bootstrap. Así que hay dos formas de incluir bootstrap en tu proyecto, ya sea para instalarlo o puedes usar esta forma más rápida con JS deliver. Y aquí tienes la guía de cómo incluir bootstrap. Entonces tenemos que incluir el archivo CSS, que, como te dije, contiene todo ese código CSS. Entonces debemos copiar y pegar este código aquí. Sólo puedo presionar copy aquí para obtener ese código. Y colóquelo dentro de las etiquetas de la cabeza antes que todas las demás hojas de estilo. Entonces etiquetas de cabeza, aquí no tenemos etiquetas de cabeza, pero podemos crearlas. Cabeza, así. Entonces entre aquí, pegamos ese enlace, con un tag link tags, abriendo ahí, cerrando aquí. Entonces también necesitamos colocar el archivo JavaScript. Entonces punto JS, ya puedes ver. Y para hacer eso, es necesario que vuelva a copiar esto. Entonces, en Bundle, hay varias opciones, pero bundle es la mejor. Así que copia. Y hay que colocarlo. Así que coloca uno de los siguientes scripts cerca del final de tus páginas justo antes de la etiqueta del cuerpo de cierre, justo antes de la etiqueta del cuerpo de cierre. Entonces justo aquí. Y eso es todo. Ahora, guarda este índice ese archivo HML, asegúrate de que la app se esté ejecutando y visítala, y ya verás una diferencia en los teléfonos Entonces los enlaces son un poco más claros de color azul, y la fuente es más grande. Y así fue como incluir bootstrap en tu app. Ahora, sigamos de nuevo el tutorial. Entonces aquí tenemos una plantilla de inicio. Entonces comienza con esta etiqueta HTML tipo doc aquí, declaración HML Lang y etiquetas de cabeza Entonces voy a copiar esto y reemplazarlo por ese. Entonces la primera etiqueta HML, entonces tenemos la, esa y esa metaetiquetas Ya incluimos este enlace, por lo que solo necesitamos estas dos metaetiquetas. Debajo de la etiqueta de la cabeza, debajo de la etiqueta de la cabeza aquí. Así meta meta, el enlace a los archivos CSS bootstrap. Y el título, esto es opcional. Entonces no está relacionado con bootstrap, pero también podemos poner un título llamemos a este bloque posts. Las etiquetas de título también están dentro de las etiquetas de la cabeza. Las etiquetas de la cabeza se cierran aquí y aquí, entonces tenemos las etiquetas del cuerpo. Hola mundo, eso es opcional. Aquí tenemos el guión que ya incluimos, este de aquí, así que todo está bien. Derecha. Entonces aquí abajo entonces explica qué hacen todas estas etiquetas si quieres leer eso. Lo que quiero hacer ahora es usar bootstrap. Entonces estos son los requisitos, los enlaces que ponemos en las metaetiquetas, pero ahora queremos usar las características reales de bootstrap. Entonces la biblioteca real. Lo que voy a hacer suele ser con bootstrap, lo que haces es que tengas una etiqueta DIV principal. Que empieza ahí y termina donde termina tu contenido. Así que aquí abajo y voy a alinear el div. Entonces abriendo div, cerrando div con una barra diagonal div y los corchetes Entonces este es todo nuestro contenido, derecho, lo que se refleja a eso de gato hasta el último muerto aquí. Y este div ahora debería tener una clase igual a comillas dobles. Y dentro de esas citas, escribes contenedor. Esta es una de las clases principales de bootstrap, y ves que guardo la página, los documentos aquí y refresco la página y ya vemos una diferencia. Lo que bootstrap está haciendo con este contenedor es que este contenedor es algún código CSS guardado en algún lugar de este archivo CSS, y este contenedor básicamente tiene algún margen, algún espaciado entre el texto y el área aquí. Por lo que la página también ya es receptiva. Entonces si lo ves, se mueve, ajusta el ancho del navegador. Entonces a continuación, lo que quiero hacer ahora es que para cada una de las publicaciones, así que las publicaciones son gatos dit, así que esta es una publicación con un enlace al nombre del autor, esta es otra publicación. Entonces para cada una de esas publicaciones, quiero crear otra división. Entonces de ahí hasta antes del final cuatro, así que aquí y tal vez sea una buena idea sangrar esto, seleccionarlos así de barril para sangrarlos Entonces básicamente, estos dos son parte de este elemento div. Entonces este es un elemento ahora. Entonces lo que voy a hacer es que voy a asignar una clase de tarjeta. Entonces, ¿de dónde voy a sacar esto? Bueno, en bootstrap, por ejemplo, puedes ver si vas a maquetación, cómo organizas tus documentos HML, ves que tienes contenedores, y ves que tienes la clase contenedor aquí que ya usamos Entonces si vas a componentes y vas a tarjeta, verás que puedes organizar tu contenido en este tipo de tarjetas. Entonces todos estos elementos aquí es una tarjeta. Ves tarjeta de clase, y esto es lo que también estoy haciendo aquí. Entonces voy a poner un poste dentro de la tarjeta. Entonces si lo guardo ahora, refrescar, ves que hay algún tipo de frontera alrededor de cada puesto. Y podemos hacerlo mejor asignando también. Después de un espacio aquí, hacemos tres, lo que significa imaginar alrededor de cada una de estas dos cajas. Así que imagina de 33 ahora es una unidad de CSS o más por decir, un nivel de espaciado. Y así se puede leer acerca de los márgenes deben estar bajo utilidades. Se trata de espaciado, entonces espaciado, verás, por ejemplo, M significa margen, y luego tienes los niveles. Entonces uno, dos, tres, cuatro, cinco, así que eso se trata de hacer algo de espacio. Ahora, volvamos al ejemplo de la tarjeta aquí dentro. Entonces tenemos esta imagen. Ya no necesitamos imágenes. Entonces esta imagen de aquí, no necesitamos eso. Pero entonces tenemos el cuerpo de la tarjeta. Entonces hay otro div dentro de esa clase de tarjeta div. Entonces Div y lo conseguimos y lo colocamos aquí. Entonces así, en abolladura otra vez, estos dos. Entonces ahora, esta es la clase igual al cuerpo de la tarjeta. Y luego también tenemos algo más título de tarjeta. Entonces este es un título de la tarjeta, que en nuestro caso, serían gatos y perros, lo que significa que podríamos agregar un título aquí. Entonces mira lo que voy a hacer Div así. Entonces esta sería clase igual al título de la tarjeta. Y por dentro, pondríamos post ese título. Sé que estoy duplicando esto, pero te diré por qué Así que publica ese título y actualiza. Entonces, sí, tenemos gatos aquí, perros aquí. Pero es mejor usar tal vez H dos en lugar de DIV. Entonces H dos ahí, y no te olvides de cambiar esto también a H dos. Se abre aquí, se cierra aquí. Entonces me refresco y esto es un título, este es un título. Después del título, tendríamos tal vez el texto. Entonces este texto aquí, que obtiene texto de tarjeta. Un div. Y esto sería el contenido post punto, derecho. Entonces ese es nuestro texto. Queremos mostrar algún texto debajo del título. Y esto, como dije, es clase igual al texto de la tarjeta. Guarda Refrescar para ver los cambios. Sí, así que el contenido también está aquí. Ahora, a continuación, quiero eliminar este enlace cambiando eso a un botón. Entonces ya ves que aquí tenemos este fondo. Entonces esa es una etiqueta A y esta clase. Entonces, ¿qué podemos hacer esto? Vamos a asignar una clase de la misma era BTN y luego BTN primaria. Ahora, vamos a guardar esto y refrescarnos para ver gatos gatos son buenos también y el botón. Ahora bien, como se trata de un botón, no queremos mostrar el título ya no queremos mostrar el título aquí del post. Queremos mostrar algo así como leer más. Seguro, refrescar. Sí, se ve mejor. A lo mejor queremos agregar debajo del div de contenido. A lo mejor queremos tener otro div donde digamos autor es post ese autor, ¿verdad? Ese. Y ahora eliminamos el texto P ya que no queremos dos campos de autor. Así que quita eso. Y esto sería también clase de tarjeta igual al texto de la tarjeta. Seguro. Ver los cambios. Sí, los gatos, los gatos son buenos para crear dits y leer más. Ahora, ya ves que estos divs están un poco demasiado cerca el uno del otro Entonces el div de contenido, el autor dif, el botón div también. Si quieres cambiar eso, podrías cambiar divs a párrafos Entonces P en vez de DF P, P, P aquí también. Refresco seguro, y ahora se ve un poco mejor. Los botones me parecen un poco grandes. Eso es porque este texto aquí es un elemento H dos. Entonces, si quieres que el texto sea más pequeño, quieres eliminar las etiquetas H dos, la etiqueta de apertura y la etiqueta de cierre. Refresco seguro, y se ve mejor. La página también responde para que puedas reducir el navegador. Eso es sobre este video. En la siguiente, te voy a presentar a jangle etiquetas de plantilla Aprenderás en el siguiente video de qué se tratan. Nos vemos ahí. 217. Herencia de plantillas: Hola. Hasta el momento, con nuestro sitio web, hemos construido esta página de inicio. Se puede ver que está en la página principal, y también tenemos la página Acerca de. Así que slash aboutSlash Esta es la página Acerca de, que no tiene ningún estilo bootstrap, claro, porque aplicamos el estilo solo al índice esa Y también tenemos las plantillas HTML de punto de blog, que es una de estas páginas o gatos o perros. Entonces tres plantillas, una, dos, tres. Ahora, necesitamos encontrar una manera de navegar por el sitio web, que es que, por ejemplo, ¿cómo va, cómo puede ir el visitante de esta página a la página acerca de? Bueno, normalmente esto se implementa a través una barra de menú de navegación, que podría estar en algún lugar arriba aquí. Y podrías hacer click sobre Link e ir a esa página. Esto es lo que haremos ahora en estos videos. ¿Cómo podemos implementar eso? Porque la barra de menú de navegación debe estar en cada página. Entonces, una forma de hacerlo es crear ese menú de navegación, que se crea con HTML. Una forma es codificar el HTML para ese menú de navegación en cada una de estas páginas HTML. Pero eso es, claro, contra los principios secos, secos que significa, no te repitas. Por lo tanto, lo que vamos a hacer es que vamos a utilizar la herencia de plantillas. ¿Qué es la herencia de plantillas? Bueno, funciona así. El componente que será repetitivo. Entonces la barra de menú de navegación en nuestro caso, va a permanecer en un solo archivo. Y luego los otros archivos, que es sobre blog e índice, estos archivos obtendrán ese otro archivo donde está el menú de navegación. Y esto se conoce como herencia de plantillas. Entonces veamos en acción cómo funciona. Así que derecho haces clic sobre las plantillas y vas a Nuevo Archivo y escribes algo así como punto base HTML. Base HML va a contener la barra de menú de navegación. Ahora, para crear un menú de navegación, en HTML, se utiliza la etiqueta Nav. Entonces ábrelo y ciérralo, y luego dentro, tienes otro div abierto y ciérralo. Y dentro de este div, tenemos la UL, que crea una lista de elementos del menú. Entonces el primer elemento del menú sería con L I Derecha. Y luego tenemos otro. Así que a casa, tenemos sobre nosotros. Sí, eso es todo. Entonces el primer elemento del menú, el segundo elemento del menú. Entonces esto sería para quién. Por lo tanto, dentro de la primera etiqueta LI, que envía para lista, colocamos colocamos unas etiquetas, que crearán un enlace. Lo mismo para el siguiente aquí, un tags, ¿verdad? Dentro de la primera una etiqueta. Entonces justo aquí, decimos HRF, esta propiedad, que va a tener como valor dentro comillas la URL a la primera página, que sería esta etiqueta URL. Código único. Bueno, ahora necesitamos mirar la URL del blog y obtener el nombre de la URL para la página de inicio, que es home. Entonces eso entra aquí, a casa. Hacemos lo mismo para así sobre la vista. De nuevo aquí, vamos a copiar eso y pegarlo dentro de la primera etiqueta H. Cuidado. Aquí hay un espacio, Hf sobre la vista de subrayado Ahora tenemos que hacer otra cosa. Tenemos que ir al índice de punto HTML y cortar desde la etiqueta del cuerpo de apertura aquí hasta la primera línea, cortarlos y pegarlos arriba aquí. Haz algo de espacio, pégalos ahí. A ir de nuevo a indexar ese HTML y volver a cortar, comenzando desde la etiqueta HTML de cierre, incluyendo la etiqueta de cuerpo de cierre, incluyendo la etiqueta script de bootstrap. Cortarlos, ir a base ese HML, ir hasta el final Haz algo de espacio, pégalo. Ahora punto base HTML será el padre. Entonces hablamos de herencia de plantillas. Este es el padre ahora y el índice de que HML es el hijo, que va a obtener esto del punto base HTML En realidad, cada página, no sólo índice, sino sobre HTML, bloque punto HTML. Por lo que todas las entradas del blog obtendrán todo esto de base HML. Eso nos permite también aplicar bootstrap en cada página web. Y ahora necesitas decirle a cada una de tus páginas, como index que HML, necesitas decirle que tiene que extender, así que a través de una etiqueta de plantilla como esta, dices, extender comillas simples punto base HTML Así que copia eso y pégalo en aproximadamente HTML también. Y aquí también, necesitamos eliminar esas etiquetas body en eso también y solo decir eso e ir a block dot HTML. Además, elimine la etiqueta del cuerpo, etiquetas HTML, las etiquetas de tipo doc, pegue eso, elimine la etiqueta HTML de cierre y la etiqueta del cuerpo de cierre eliminar guardar, guardar. Después ir al HTML de punto base y al final, así después del menú de navegación me, queremos volver a hacer una etiqueta de plantilla y decir bloquear contenido. Y también lo mismo. Así que una plantilla etiqueta y bloque de contenido. Entonces, ¿qué es esto? Bueno, básicamente, página web H. Entonces piensa en lo que ve el visitante en el sitio web. Ellos ven en la parte superior una barra de menú de navegación, cual es esta de aquí, ¿verdad? Y luego ven el contenido que podría ser el post sobre gatos, el contenido de gatos, o en el caso de sobre es el contenido de la página A. Entonces debajo del menú viene el contenido. Entonces este es el contenido. Y ahora necesitamos recordar este contenido variable e ir, por ejemplo, a indexar ese HTML, y luego debajo de esto, decimos Bloquear contenido. Y termina de nuevo con contenido de bloque. , lo que significa que como ves esto extiende el HTML de punto base, por lo que obtiene los datos del HML base, y luego esta cosa entre el bloque, las etiquetas de contenido de ahí a allá se combina de alguna manera con esa página HML base para ser renderizadas en el navegador como una página completa Y eso es sobre la herencia de plantillas. Es un poco difícil de entender. Entonces veamos si ya hicimos algunos errores. Vamos a ver el resultado Sí, claro. Entonces dice que extender, ¿olvidaste registrarte o cargar esta etiqueta? Bueno, extender eso es porque jangos no se reconocen en esto porque se Así blog dot HTML se extiende, punto base HTML. Hagamos lo mismo con las otras páginas y guardemos esta también, y guardemos. Sí. Esta es una plantilla HML de punto base Busquemos el siguiente error. Bien, no está mal. Entonces vemos algo aquí, pero no vemos ningún texto. Así que volvamos y arreglemos eso. Yo base punto HTML. Entonces aquí tenemos el enlace. Pero no tenemos ningún texto. Entonces digamos hogar para eso y sobre nosotros para esto. Entonces si refrescar. Y si, ya vemos algo, presione sobre nosotros. Nos lleva a la página Acerca de. Ir a casa. Se va a casa sobre nosotros. Genial. No vemos el contenido aquí, así que arreglemos eso para la página At HML Porque no lo vemos porque no tenemos esas etiquetas de contenido de bloque. Entonces bloquea el contenido aquí y aquí, pero este debería ser con bloque, seguro, muy fresco, y este es el contenido de un barco. Ahora, claro, si quieres que esto sea más bonito, tienes que ponerlo dentro de la etiqueta div y decir class container, safe, refresh, y ahora va a algún lugar en el medio Y también puedes hacerlo aún mejor. Entonces esta es una diferencia principal que contiene todo Esto sería algo así como H dos. Y luego podríamos agregar más diffs con contenido. Este es el contenido así. Entonces el menú de navegación ahora, no se ve muy bonito porque no hemos aplicado ningún estilo de clases bootstrap a este elemento. Entonces tienes NAF sin clase, D sin clase, UL, LI y A, además, sin clases, sin estilo bootstrap Entonces hagámoslo en el siguiente video. Nos vemos ahí. 218. Aplicación de estilo de Bootstrap al menú de navegación: Volveremos. Agreguemos un poco de estilo al menú de navegación ahora. Así que volvemos al HTML de punto base. Y el primer ítem es NOV. En primer lugar, queremos seleccionar todos estos y sangrarlos uno y dos Por lo que debe estar sangrada debajo de la etiqueta del cuerpo. ¿Verdad? Así que empieza con NAV y clase igual a Conozco algunas clases de Bootstrap, y también puedes encontrar ejemplos en línea. Entonces Nov bar, especifica que se trata de un bar Nov. Así que usa la luz de barra Nov estilo Navbar para el color y la luz BG de fondo también, tener algo de sombra y luego también necesitas dar clase es una propiedad de NOV y también después del abrigo, aquí necesitas dar otra ID igual a NOV principal así Entonces esto es utilizado por JavaScript de bootstrap. Entonces el próximo div tendrá una clase de colapso colapso Nova. Entonces estas son diferentes clases y una idea de Nov jabalí sensible Entonces tenemos la clase UL. Nvbnuvt. ML significa margen izquierdo y su valor será dos. Por último, la clase LI es el ítem NOV. Entonces este es un elemento del menú, y eso es todo. Guarde eso y vea qué va a cambiar. Bien. No está mal. Ahora bien, las etiquetas A, así que los enlaces no se ven muy bien, pero la barra en sí se ve bien con una sombra. Entonces hagamos el estilo de las etiquetas A. Entonces una clase igual a la marca Navbar, segura. Recargar. El hogar se ve bien, pero sobre nosotros no no. Entonces hagamos lo mismo por El otro así. Sí, se ve bien. Tenemos que ponerlo un poco a la derecha. Y una clase P tres agregada a la primera etiqueta A debería funcionar. Así que guarda, actualiza, y va más a la derecha. Entonces P tres significa que le dan un relleno alrededor de esa clase A, y deberías hacer lo mismo con las otras. Entonces P tres, guardar, refrescar. Ese es el menú de navegación. Ahora, aquí abajo, queremos más espacio entre el menú de navegación y este contenido. Vamos a arreglar eso. Creo que eso funcionaría agregando el elemento de navegación a la clase del elemento de navegación. Podríamos agregar un MB de tres. Entonces B significa margen inferior. Refrescar. Y si, ahora es mejor. Por lo que ahora hay algo de espacio debajo del menú, la barra de menú de navegación. Y eso es todo. Espero que esto tenga sentido, y te lo enviaré luego. Gracias. 219. Demostración de la aplicación de traducción Django: Hola, bienvenidos de nuevo a otra serie de videos. En la serie, vamos a construir una aplicación web de traductor con jango Entonces esta aplicación web, la aplicación Jango va a ser parte de nuestro proyecto de sitio web jango El sitio web ya tiene una app de bloque a la que podemos acceder a través de la página de inicio. Entonces esto es solo un boceto del sitio web. Y también teníamos esta página sobre nosotros, que también forma parte de esa app de bloque. No, traductor va a ser una segunda app que vamos a añadir a este sitio web jango Y hay tres razones por las que incluyo esta app de traductor en nuestro JangOpject La primera razón es para rebobinar lo que aprendiste hasta el momento. Entonces aprendes a crear esta app de bloques. Pero ahora quiero volver a pasar por el proceso de creación de app porque ya creamos una app, pero cuando creas otra app, ves las cosas desde una perspectiva diferente, y aprendes mejor, estoy seguro. Entonces esa es una razón para revisar el proceso de creación de aplicaciones. La segunda razón entonces es aprender sobre formularios jango porque en esta app jango, vamos a tener dos cuadros de texto En una, el usuario va a ingresar el término, las frases, quieren ser traducidas. Y en el segundo, van a ver el texto traducido. Entonces vamos a usar el inglés como primer idioma, y luego otro idioma como idioma traducido. Vamos a hablar de ese detalle más adelante. Entonces la idea aquí es que vas a aprender sobre formas. En jango porque esta cosa de aquí es en realidad una forma. Entonces un formulario que permite a los usuarios ingresar algunos datos, algún texto, y luego realizan una solicitud, que es una solicitud de publicación. Por lo que publican algunos datos en el servidor. En este caso, será el texto en el que escribirán aquí. Entonces el servidor, Jango va a obtener este texto y usar una biblioteca Python para traducir ese texto a otro idioma Entonces Jango va a enviar los datos de vuelta al usuario. Entonces este aquí será el cuadro de entrada del formulario, y este será el cuadro de salida del formulario. Entonces nuevamente, revisar el proceso de creación de aplicaciones fue una razón y aprender sobre los formularios es otra razón Y la tercera razón por la que quiero tener estos videos es para mostrarte cómo procesar el contenido que el usuario envía a nuestra app jangle Um, entonces en este caso, será el texto, y vas a ver cómo organizar la biblioteca que procesa este texto en archivos y cómo obtener este texto y cómo enviarlo al usuario porque con nuestra app de bloques, realmente no estamos procesando ningún contenido de usuario, pero esta vez lo haremos. Así que prepárate, y te hablaré en los próximos videos. Está aquí. 220. El paso del desarrollo de aplicaciones de Django: Oye. En este video, voy a mencionar los pasos que debes seguir para construir esta aplicación de traductor en particular. Y estos pasos también representan cualquier otra aplicación que quieras construir. Entonces, antes que nada, lo que quieres hacer cuando tienes una idea o algunos requisitos para construir una app, quieres saber si es posible construir esa aplicación web en particular. Por ejemplo, queremos construir esta app que traduzca, digamos, del inglés al alemán. Entonces, antes que nada, quieres responder a la pregunta de, es posible traducir un trozo de texto, así que me cadena, que está en inglés ¿Se puede traducir a un texto en alemán? Entonces vuelvo a encadenar, pero la versión alemana de esa cadena original. Entonces, ¿puedes traducir texto con Python? Y para eso, querrías investigar un poco en la web y tal vez OscoFMS hasta encontrar un paquete Python, tal vez, lo que facilitaría hacer esto O también podrías construir tu propio paquete, lo que debería ser mucho trabajo para esta tarea en particular porque traducir idiomas no es fácil Así que investigué un poco en Google, y descubrí que una buena biblioteca de paquetes para usar para esto es Google Trans, que básicamente está construida sobre la API de Google Translate. Entonces con Google Trans, puedes proporcionar una cadena y Google Trans obtendrá la traducción de Google Translate, y devolverá una cadena en el idioma de destino. Entonces problema resuelto. posible traducir vía Python. Entonces tenemos luz verde para seguir creando nuestra app. Entonces lo siguiente que quieres hacer es crear una app jango vacía que vamos a hacer en el siguiente video Y luego después de eso, se quiere seguir el enfoque de arriba abajo, que es pensar desde el punto de vista del usuario. Entonces, en lugar de pasar por tus módulos, crear un modelo o tal vez crear una vista, quieres crear lo que el usuario quiere ver, que es la plantilla HTML. Entonces el primer paso sería crear una plantilla HTML, y luego esa plantilla, ese HTML tiene que ser renderizada a una URL en particular. Entonces, a continuación, desea configurar la URL de su aplicación, y luego después de eso, desea conectar las URL y esa URL quiere desencadenar una vista en particular Y así a continuación, quieres crear una vista. La vista básicamente obtendrá el HMLU creado en este paso y lo servirá a esa URL Entonces se quiere crear un modelo que contenga los datos que serán inyectados a la plantilla HDML Y en este paso, entonces deberíamos haber construido la estructura de nuestra aplicación web con HTML ya y con el cuadro de texto está listo para texto. Entonces podemos obtener ese texto para que podamos obtener ese texto y traducirlo y devolverlo a uno de los cuadros de texto. Entonces esos son los pasos que vamos a dar. Entonces, en el siguiente video, vamos a crear la aplicación web jango en nuestro JangoPject existente Te hablaré en el siguiente video. 221. Crear una estructura de aplicación vacía para la aplicación Translator: Oye. En este video, vamos a crear una nueva app en nuestro proyecto de janga existente Primero, echemos un vistazo a cómo se ve el sitio web. Entonces en mi terminal, asegúrate de que tu entorno virtual esté activado. El mío no es porque no tenga este paréntesis delante aquí Pero si creo una nueva terminal, usando el icono más o voy a EminalNW Mi entorno virtual está activado ahora, así puedo seguir adelante y decir Python, administrar ese servidor de ejecución PY Vaya a ese sitio web, y así es como se ve el sitio web ahora, y aquí vamos a tener otro elemento del menú, que va a contener la aplicación de traductor. Entonces, pongámonos a trabajar. Creemos la aplicación, detengamos que el servidor se ejecute con Control C y Ejecutar Python, administrar punto PY, iniciar la aplicación y luego darle un nombre a la aplicación. Como traductor, ejecutar y crea un nuevo directorio de traductores. Se puede ver aquí. Entonces está en el mismo directorio con bloque. El bloque está en el directorio raíz. El traductor también está en el directorio raíz, como puedes ver aquí. Ahora, una vez que creas una app con Start app, entonces quieres registrarla en la configuración de mi sitio. Ve a ajustes punto PY JangOpject settings y quieres ir a Aplicaciones instaladas Así que antes agregamos el bloque aquí cuando creamos la aplicación de blog, ahora después de la coma, queremos agregar otro elemento a esta lista de aplicaciones instaladas Entonces es cadena, y el nombre de esto es o Traductor, sí. Entonces esto debería reflejar el nombre de tu app y el nombre del directorio aquí. Guarde la configuración que PY. Y así es como crear una nueva app vacía en jungo. En el siguiente video, vamos a empezar a construir nuestra plantilla HTML. Entonces nos vemos ahí. 222. Cómo crear una forma de Django: Anteriormente, creamos una nueva aplicación vacía en nuestro proyecto jangle Ahora el siguiente paso es. Por lo que se completa este paso. Crear aplicación jangle vacía. El siguiente es crear HTML. Entonces como dijimos, lo que queremos tener es que queremos tener un nuevo elemento de menú aquí, que vamos a crear más tarde el ítem, pero primero queremos crear la página. Después agregamos esa página a la barra de menú. Entonces la página va a ser sencilla. Va a tener un cuadro de texto aquí y otro cuadro de texto a la derecha, y un botón en algún lugar debajo Por lo que se espera que el usuario ingrese algún texto en inglés, y luego cuando presione el botón, ese texto va a ser traducido, digamos, al alemán. Entonces vamos a elegir el alemán como nuestro ejemplo. Por supuesto, puedes mejorar la aplicación más adelante agregando una opción para elegir otros idiomas también. Pero por ahora, vamos a mantener sencillo enfocarnos en las formas. Esa será una forma que estaremos construyendo. Empecemos por crear un archivo HTML bajo plantillas. Así que haz clic derecho sobre Plantillas y ve al archivo. Así nuevo archivo. Quizás traductor dot HTML sería un buen nombre de archivo. Ahora queremos construir esos dos cuadros de texto y el botón. Pero en vez de escribir el HTML aquí mientras ves el video, solo voy a copiar el código que ya construí y pegarlo aquí y explicarte. Ahora, para que se vea bien, también pegaré el enlace al bootstrap. Fuente para que los cuadros de texto se vean bien. Y puedes encontrar este código adjunto a esta conferencia. Entonces lo guardaré, y luego haré clic derecho aquí y voy a Revelar en Finder o en el Explorador de Windows, y luego puedo hacer doble clic en él. Y así es como se ve. Entonces tenemos estos dos cuadros de texto los cuales pueden ser expandidos por el usuario, el usuario puede escribir texto aquí, también puede escribir texto aquí. Pero este de aquí básicamente servirá para mostrar la salida. Pero de todos modos, el usuario también puede escribir texto ahí dentro y modificar la salida si así lo desea y así sucesivamente. Y el botón de enviar es lo traduce este texto a ese. Entonces ahora, claro, no está funcionando. No esperes que este botón haga nada porque no está conectado a jango Déjame explicarte lo que hace el código. Entonces este enlace aquí está solo temporalmente en este archivo porque normalmente no necesitamos eso. Entonces voy a borrarlo. No lo necesitamos porque ese enlace ya está en HTML de punto base. Entonces esta de aquí. Y ese estilo bootstrap se aplicará a todas las plantillas que están extendiendo HTML de punto base. Actualmente, sin embargo, el traductor HML no está extendiendo esa plantilla Entonces agreguemos la etiqueta que se extiende, así se extiende en comillas punto base HTML. Y luego también queremos volver a hacer el texto y decir contenido de bloque. Ahí y ciérrala aquí y bloquea el contenido. Así como así. Entonces este archivo va a obtener el código de punto base ML, y este código se combinará con ese código para servir a la página completa, incluyendo la barra de navegación. Entonces los elementos del menú en la página web. Entonces esto es lo que tenemos aquí. Tenemos este contenedor de clase, que es el div principal que contiene todo, así que comienza aquí y se cierra aquí. Y por dentro, este div contiene una forma. Entonces el formulario empieza aquí y termina aquí. Entonces la forma es esta incluyendo tanto los cuadros de texto como el botón. Entonces este de aquí es una fila. Comienza aquí. Termina aquí dentro. Entonces básicamente, esta fila de aquí, es una división que contiene todas estas dos cajas y el botón otra vez. Y dentro de esa división con fila de clase, tenemos esta división también, que es la primera área de texto. Entonces esta llamada SM six define que ésta es en realidad una columna de esa fila de esa fila. Entonces esta es la primera columna que corresponde a este cuadro de texto, esta columna aquí Y luego la siguiente columna, que es esta de aquí, contiene el otro cuadro de texto y el botón. Entonces área de texto significa este cuadro de texto aquí, y entrada con clase BTN significa este botón aquí Entonces área de texto, la primera área de texto, área de texto, la segunda área de texto, e ingrese el botón. Eso es. Entonces otra vez, el formulario ahora, ves que tiene una propiedad de acción, que tiene esta etiqueta de plantilla que he escrito aquí. Y entonces lo que está pasando aquí es que cuando se presiona el botón, así se presiona este botón de enviar, algo va a pasar. Y lo que pasa es que se visitará esta URL. Esto no es una URL. Es el nombre de un patrón de URL que crearemos más adelante. Verás cómo funciona eso. Y el método es un método post, lo que significa que el usuario está enviando algunos datos y esperan recuperar algún proceso de datos del servidor. El resto ya lo explicamos. Entonces las divisiones y el área de texto con esta clase bootstrap de clase. Filas significa que tiene tres filas de texto por defecto, lo que una, dos y tres filas de texto. Entonces, la altura de esa área de texto. Este nombre va a ser usado posteriormente para hacer referencia a esa área de texto de jango para obtener el texto de esa área de texto y procesarlo en jungla así tenemos el otro área de texto y botón de entradas con esta clase desde bootstrap, el tipo es submit, lo que significa que cuando se presiona ese botón, este formulario, se enviará el formulario Entonces enviaremos los datos, el texto original del usuario en este caso, y el valor es el nombre del botón. Por lo tanto, presentar, presentar. Y eso es todo. Todo bien. Entonces tenemos HTML, pero necesitamos definir una URL a través de la cual el usuario accederá a esta página web HTML en particular. Así que vamos a configurar las URL en el siguiente video, también. 223. Obtener y procesar la información del usuario a través de un formulario: Hola, bienvenido de nuevo. Anteriormente, construimos esta página web, que se ve bien, pero no está haciendo mucho por ahora. Entonces, sea cual sea el texto que ingreses ahí, presionas enviar y no pasa nada. Entonces el texto desaparece. Entonces vamos a implementar esto. Pero primero, hay que entender las dos solicitudes HTTP que se están llevando a cabo aquí. La primera solicitud HTP es cuando el usuario ingresa la URL, digamos example.com slash translate Slash o esta IP del host local como es en este caso, y esta es una y esta Y esta solicitud está siendo manejada por este patrón de URL, y por supuesto, también este. Entonces ambos estos dos se fusionan en una URL, que es example.com slash translate slash Pero también se está haciendo otra solicitud, y es entonces cuando el usuario presiona el botón enviar. está accediendo a otra URL, y esa es la que ves en traductor dot HTML en esta línea en esta línea aquí. Entonces ves que cuando se presiona el botón, se visita esta URL. Entonces vista de traductor, que de nuevo, es la misma URL así traducir revisión, que corresponde a example.com slash TransLatas Entonces, actualmente, visitar la URL a través una solicitud GT como esta cuando solo refrescas tu navegador o ingresas la URL, y al presionar el botón de submin se está llevando al usuario a la misma URL Tenemos que cambiar eso. Necesitamos separar las dos solicitudes y realizar diferentes acciones dependiendo si el usuario está haciendo una solicitud de obtener o una solicitud posterior. Cuando el usuario realiza una postsolicitud, queremos obtener el texto de aquí y mostrar la versión en mayúscula en esta otra caja Entonces hagámoslo. Lo que tenemos que hacer es distinguir en puntos de vista. Necesitamos distinguir si método de punto de solicitud es una solicitud posterior. Si ese es el caso, queremos obtener el texto original o el texto de entrada que el usuario ingrese aquí. Y la forma en que lo conseguimos es a través la solicitud objeto punto post y aquí, ¿qué viene aquí? Bueno, aquí debemos ingresar el nombre de esa área de texto, que es en mi caso, mi área de texto. Así que aquí, mi área de texto va dentro como una cadena. Entonces, si ese es el caso, haga esto más devuelva la página tal como está. Entonces de lo contrario significa si la solicitud es una solicitud de obtención. Entonces, si se trata de una solicitud de publicación a través del botón, obtenemos el texto original del área de texto, y vamos a imprimirlo solo para ver cómo se ve el texto original. De lo contrario, en el caso de obtener solicitud, solo devolvemos la página tal como está. Así traductor punto HTML. Guardar. Y veamos recargar primero Y nos sale este error. No tiene método de atributo, porque debería ser método. Lo siento. Guardar y visitar de nuevo. Traducir es nuestro UL Translate. Y escribamos algo, envíanos. Y veamos qué obtenemos ahora en la terminal. Entonces veo que AAAA está impreso, ¿verdad? Esta línea fue ejecutada. Pero después de eso, obtuvimos un error. Dice que el traductor ve la vista del traductor. Entonces esta vista, esta función de vista no devolvió un objeto HTTP, lo cual es cierto. Entonces obtuvimos una solicitud de publicación cuando presionamos el botón enviar, pero aquí no se devolvió nada. Entonces debemos devolver algo. Y esto también es una llamada a función de render, que obtiene una solicitud como argumento traducir el HTML. Y ahora, también necesitamos pasar algo más aquí, que es la salida. Hasta el momento, vimos que esto funciona. Estamos obteniendo los textos del usuario con éxito, pero queremos hacer algo con ese texto. Por ejemplo, digamos salida, vas al texto original. Por ahora, como decíamos, digamos que lo convertimos en mayúsculas Entonces lo que pasamos aquí en la función render es un diccionario, que es así. Digamos salida, texto. Entonces esta es una clave, una cadena, y tiene como salida de valor. Entonces esta variable, el texto en mayúsculas. Ahora, guardamos esto y luego nos vamos al traductor punto HTML. Y en esta segunda área de texto, entre el primer ataque de área de texto y el ataque de área de texto de cierre, aquí ponemos una variable de plantilla, que está fuera put text. Entonces esta cosa de aquí. Entonces el valor de esto en realidad, esto se inyectará en esta área de texto. A ver si esto va a funcionar. Así que haz una solicitud Get. Obtenemos la página web con éxito, escribimos algo, enviamos y obtenemos la versión en mayúscula de ese texto. Entonces está funcionando. Entonces esa versión en mayúscula del texto vino de este texto de salida Y así es como usar formularios HTML con Jango. Ahora, antes de cerrar este video, quiero mostrarte un problema con nuestra app Así que como puedes ver, escribes algo de texto aquí, envíalo, pero el texto original desaparece después el usuario envía el texto Así que arreglemos eso. Es muy fácil de hacer. Primero, entendamos por qué está sucediendo eso. Entonces si vas a Views, nuevamente, tenemos solicito iguales para publicar, y en ese caso, enviamos la salida de vuelta a la página, pero no enviamos nada más. Entonces esta será una nueva renderización. Se renderizarán los cuadros de texto, las dos áreas de texto del traductor HML, pero una de ellas permanecerá vacía porque esto será una actualización de la página, por así decirlo Por lo tanto, si quieres tener también el texto original en la página web, lo que debes hacer es agregar un nuevo par aquí en el diccionario. Digamos que este sería texto original. Como una cuerda. Entonces la clave y el valor de eso sería el texto original, la variable. Entonces esta de aquí. Copia esa cadena y ve al traductor punto HTML. Y aquí, en la primera área de texto, colocamos una variable de plantilla. En el interior que va texto original. Así que al igual que este cuadro de texto, tenemos ese también. Y tan fácil como eso, guardar en HTML traducido, guardar vistas H punto PY también, y el servidor se reinició Entonces ahora el servidor se reinició. Entonces sabemos que los cambios se aplican ahora, refrescar la página, escribir algo aquí, enviar, y tanto el texto original como el texto de salida permanecen en la página web. Eso completa la parte jango. Entonces tenemos una aplicación web que funciona. Y ahora todo lo que tenemos que hacer es en lugar de capitalizar el texto con upper, lo traducimos con algún otro paquete En este caso, vamos a utilizar el paquete Google Trans. Entonces hagámoslo en el siguiente video. Gracias por seguir hasta el momento. Nos vemos ahí. 224. Completar la aplicación Translator: Bienvenido de nuevo, y vamos con el empuje final de nuestra aplicación. Actualmente, esta aplicación devuelve la versión en mayúscula de un texto Ahora traduzcamos cualquier texto que el usuario ingrese aquí. Para ello, vamos a abrir una nueva terminal para instalar Google Trans. Pero actualmente, sin embargo, hay un problema con esta biblioteca, que se puede solucionar instalando una versión Alpha de la biblioteca, cual puedes instalar la versión Alpha usando lo que estoy escribiendo ahora. Así que podrías intentar no tengas miedo de probar cualquiera de estos. Entonces, ya sea Google Trans o lo que sea que funcione. Entonces, si instalas uno y lo pruebas, no funciona, luego instala la versión Alpha, y esa versión Alpha anulará la versión anterior que instalaste. Entonces no se hizo ningún daño. Lo que sea que funcione, usa eso. Para mí, me enteré de que esta versión funciona. Entonces 4.0 0.0 guión R C uno ejecutar. Y si, estaba instalado. Entonces puedo tratar de usarlo. Entonces estoy lo instalé para mi entorno virtual. Así que ten cuidado con eso. Ves NFR Se activó cuando lo instalé con PIP. Así que ahora puedo probar eso. Puedo abrir un Python Shell. Y la forma en que esto funciona es que importas desde Google Importa la clase de traductor. Después se crea una instancia de traducción. Usando esa clase de traductor y luego fuera de esa instancia, dices traducción que traduce texto igual a. Digamos, ¿cómo aprendiste Python entre comillas? Por lo que viene como una cadena y prueba para el idioma de destino. Digamos DE para alemán, puedes encontrar estas abreviaturas en Google, así abreviaturas de idioma D significa alemán. Y si accedes a texto fuera de eso obtienes la versión en alemán de ese término esa frase. Entonces la biblioteca está funcionando para mí. Ahora quiero escribir este código en algún lugar de mi aplicación jangle en la aplicación de traductor Entonces en tales casos, lo que quieres hacer es querer crear un archivo separado dentro de la app de traductor, llámela tal vez traducir ese PY. Dentro de aquí, quieres importar desde Google Import, traductor. Lo que queremos hacer es tal vez crear una función, translate, que obtiene un texto como parámetro. Esta función se utilizará dentro de vistas PY. Vamos a llamar a esa función aquí, que será algo así. Desde punto Importar, traducir. Entonces la salida esta vez será traducir dot translate. El texto será texto original. Entonces traducir es esta función. Entonces translate es un nombre de módulo, entonces translate dot PY y translate es una función. Entonces texto, entonces, digamos traductor, igual a traductor, la instancia, luego traducción igual al traductor punto traducir texto es igual a texto, destino es igual a la cadena DE, y luego devuelve texto de punto de traducción. Este es un objeto de traducción, y necesita extraer la propiedad text de eso para obtener la cadena real. Guarde eso y guarde esto también. Y probemos la app. Y está funcionando. Entonces obtuvimos la traducción en alemán, como pueden ver. Derecha. Por último, también quería agregar un elemento de menú aquí para nuestro traductor ahora para que podamos acceder fácilmente a él. Para ello, quieres ir a HTML Base, y simplemente copiar uno de estos, un impuesto, copiarlo y pegarlo aquí abajo. Y así esto va a ser traductor. Y este es el nombre de la URL que puedes obtener de aquí, URL's PY, copiar eso, ir a base ese HTML, pegarlo ahí, guardar y aquí está el ítem. Entonces este es el sitio web. Con eso concluye este proyecto jangle. Espero que hayas aprendido de esto, y creo que esto debería ser suficiente para que empiezas con jango Así que cubrimos algunas de las funcionalidades muy importantes de jango que era manejar bases de datos y obtener la entrada del usuario de los formularios y procesar esa entrada y luego devolver la salida al usuario Entonces, muchas gracias por seguirle y nos vemos de nuevo. Adiós. 225. Demostración de la aplicación 10: aplicación web de geocodificador +: Genial. Como ya sabrás, nos estamos acercando al final del curso, y éste, esta es la última sección del curso donde construyes tu décima aplicación. Este en particular es especial. Lo especial no se trata de la aplicación en sí porque cada aplicación es realmente especial. Lo especial de esta aplicación es que construirás esta de forma independiente. Entonces esto es en forma de proyecto. Tienes que construir esto desde cero. Y has aprendido todas las habilidades a lo largo del curso, por lo que las habilidades que se requieren para construir esta aplicación en particular. Y en este video, lo que quería hacer es darte una demostración de lo que hace esta aplicación, y luego puedes comenzar a construirla enseguida después de este video. Entonces en el siguiente video, te mostraré la solución. Entonces te mostraré el código en el video y te explicaré qué hace el código y también el enfoque que usé para construir la aplicación. Pero no, podría haber grabado estos videos tal como lo hice con las otras nueve aplicaciones del curso, pero realmente quería que hicieras algo por tu cuenta, y eso te servirá para dos cosas. Una es que en realidad harás algo de forma independiente, y aprenderás mucho de eso. Y el segundo, puedes usar esto como cartera. Esta es una aplicación web bastante agradable. Pero esto es duro. Es decir, me sorprendería ver a alguien haciendo que esto funcione 100% a menos que seas un genio. Eso lo digo en serio. Pero deberías poder hacer que esto funcione, digamos, en torno al 50%. Si haces que funcione 50%, entonces realmente has aprendido del curso. Entonces, ¿a qué me refiero con 50%? Bueno, puedes parar en alguna parte y pedir ayuda. A lo mejor tienes un error ahí y no estás siendo capaz entenderlo y resolverlo para seguir adelante, o simplemente no sabes qué hacer a continuación. Entonces, en tales escenarios, puede intervenir y publicar una pregunta en el área de preguntas y respuestas Entonces en el área de discusión del curso. Diré que no me preguntes enseguida. O sea, me gustan las preguntas, pero es bueno para ti resolver los problemas tú mismo. Ya sabes, la programación es dura. Quiero decir, a menudo, todo lo que necesitas es un descanso, como un café o un té para refrescar tu cerebro y hacerlo pensar mejor. Y entonces de repente puede te encuentres resolviendo ese problema. Pero si eso no funciona, entonces estoy aquí para ayudarte. Solo deja caer una pregunta, y respondo dentro de un día. Y mi recomendación ahora intenta empezar de cero. No mires de inmediato el código o las conferencias que hemos recorrido en el curso. En lugar de hacer eso, trata de reunir tus pensamientos en una hoja de papel. Anote algunos pasos como el paso uno, haga la interfaz de usuario, el paso dos, un poco de script que se asiente con los datos y genere una salida, y luego haga el matraz, la estructura, etc. Y luego vas a implementar estos paso a paso. Si tienes existencias entonces, está perfectamente bien mirar los recursos. Lo hago todo el tiempo. Entonces ahora, ¿qué es esta aplicación? Bueno, esta es una aplicación Flask que espera del usuario un archivo CSV, cual debería tener al menos una columna llamada dirección. Por ejemplo, aquí hay un archivo CSV. Y puedes ver que ahí tenemos una columna de dirección, por lo que el usuario debe tener una columna llamada address, con nombre address ahí. Ya sea con una A minúscula o mayúscula, no importa. Por lo que debes construir tu aplicación para reconocer tanto la dirección con una minúscula A dirección con mayúscula A. Ahora, el usuario puede subir dicho archivo usando el botón elegir archivo aquí Y se puede ver que los supermercados se subieron ahí dentro. Y una vez que el usuario suba ese archivo, presionará enviar Y esta tabla aparece. Entonces, una vez que el usuario carga dicho archivo, el backend de su aplicación, por lo que el script de Python leerá ese archivo, y agregará una columna de latitud y longitud, que se calculan a partir de la columna de dirección Entonces estamos hablando de geocodificación y ya sabes cómo hacer geocodificación Eso lo aprendes en el curso en la sección Pandas. Y como ves, la tabla de resultados se muestra en la página web una vez que el usuario presiona el botón enviar, y puedes ver las dos columnas ahí dentro. Y por último, también quieres permitir que el usuario descargue la versión CSV. Entonces un archivo que contenga estos datos. Y por lo tanto, es necesario que se muestre un botón de descarga aquí como lo hice yo. Entonces, una vez que el usuario presiona descargar, se descarga un archivo. Se trata de un archivo. También tenemos algunas celdas vacías ahí porque Python no pudo, por lo que el servicio de geocodificación no pudo geocodificar esta dirección a latitud y longitud Entonces sí, necesitas contar para eso y simplemente pasar algunos no valores a esas celdas. Ahora, pronto puede que te encuentres con problemas como, ya sabes, si el usuario sube algunos otros archivos, así que cambiemos esto para agregar en lugar de dirección, y voy a guardar esto Entonces ya no tengo una columna de dirección en ese archivo, déjame volver a subirla. Así. Enviar. Y en este caso, quieres mostrar un mensaje ahí diciendo que por favor asegúrate de tener una columna de dirección en tu caída CSV o algo así. Entonces no quieres que el programa se estrelle para mostrar el error de matraz ahí dentro. Entonces sí, hay que intentar aceptar algunos errores ahí dentro. Y, eso es todo. En ese momento, ha construido un servicio de geocodificación. Espero haber sido claro con explicaciones. Pero si tienes dudas, por favor, pregúntalas. Te deseo buena suerte con este proyecto. Será duro pero divertido, y se trata de la persistencia. Entonces, si te comprometes a hacerlo, lo harás. El siguiente video es peligroso porque te voy a mostrar la solución ahí dentro. Así que por favor míralo como último recurso o mírelo para comparar tu aplicación terminada con la mía. Y además, cuando compares tu solución con la mía, no esperes que sean las mismas. Nunca lo serán. Quiero decir, hay diferentes formas de hacer una aplicación, y la mía puede ser mejor que la tuya o al revés. Así que por favor tenlo en cuenta. Y si, eso es lo que quería decir. Espero que hayan disfrutado de mi curso. También te agradezco que te hayas dejado la reseña. Sí miro todas las críticas, y las agradezco mucho. Entonces sí, muchas gracias, y luego hablaré contigo. 226. Parte 1 de cómo crear la aplicación web de geocodificador: Oye, bienvenido a esta nueva conferencia, y espero que te haya sido fácil intentar construir la aplicación de geocodificación Sé que debería haber sido duro, pero si has pasado por cierto punto, eso también es genial. En esta conferencia ahora, obtienes dos cosas. Lo primero es que encontrarás el apego en los recursos de esta conferencia. Allí encontrarás todos los archivos que contienen el código de esta aplicación web. Específicamente, encontrarás cuatro directorios, por lo que plantillas estáticas, subidas y visuales, y también un archivo app dot py Ahora aquí resulta que tengo cuatro archivos de app. Pero básicamente, la última es la versión final. Entonces esta es muy básica la versión uno, donde solo agrego un par de funciones en script Python, y luego agregué algunas más a estas funciones y luego algunas más, y luego agregué. Y luego finalmente agregué un poco más de código que completó la aplicación. Entonces esto es lo que obtienes. Y lo encontrarás en un archivo zip. Entonces, por favor, descarga eso. Sí, eso es lo primero que obtendrás en esta conferencia, el archivo zip del código de la solución. Y lo segundo es, voy a seguir adelante ahora y explicar cómo abordo este problema, y te voy a mostrar el código y lo que construyo primero y segundo tercio y así sucesivamente. Entonces estas son las cuatro versiones. Tengo la versión uno, cuando agregué algún código, dos, tres y cuatro. Así que vamos a ignorar esto por un momento porque lo primero que quiero explicar es la interfaz de usuario. Entonces comenzaremos primero desde el front end. Ahora bien, lo primero que hice, sin embargo, fue crear una estructura de directorios. Así que creé una carpeta estática vacía, plantillas y subidas y virtuales Por lo tanto, la estática y las plantillas son estándar para la aplicación FLASK. Y la carpeta de subidas será solo carpeta donde genere estos archivos intermedios que la aplicación pone a disposición para su descarga para los usuarios Eso lo verás en sólo un rato. También creé este laboratorio de carpetas virtuales, que en realidad es el directorio del entorno visual. Así que hice eso con Python con la bandera N Virtual Virtual para el nombre del directorio. Entonces, si ejecutas eso, obtendrás este directorio con una nueva instalación de Python y PIP y otras bibliotecas integradas Y luego seguí adelante e instalé Flask e instalé Pandas porque necesitarás pandas para leer los datos que el usuario está enviando y quieres calcular algunas columnas ahí, y también necesitas que Geopy geocodifique esos valores desde el Y esas son las tres bibliotecas de terceros que necesitas instalar. Una vez que creé estos directorios vacíos, entonces el segundo paso fue crear la interfaz de usuario. Entonces lo que hice fue crear una plantilla HEML de punto índice en la carpeta de plantillas Entonces, al principio, eso fue bastante sencillo. Entonces no contenía tanto bien. Eso simplemente contenía, como, una pequeña y algunos encabezamientos ahí y también una forma básica E inicialmente, no puse nada en la acción. Entonces, cuando el usuario envía, tenía este botón de enviar, y también tenía este tipo de archivo de entrada ahí Entonces si puedes recordarlo archivo, este es un formulario. Tenemos esta entrada de archivo y el botón de enviar. Por lo que estos dos y también restringieron el envío de archivos a CSV únicamente. Y esa es una forma. No tenía esto al principio, así que no voy a ir a explicar esto por ahora. Voy a pasar por esto más tarde. Sí, esa era la interfaz. Más tarde, fui y creé este archivo CSS principal. Entonces aquí encuentras el estilo CSS para la página web. No voy a entrar en esto ahora. Esto es bastante autoexplicativo. Así que hemos hecho CSS antes en el curso. Y este archivo también está incluido en los recursos entre los demás archivos, pero nunca espero que tengas el mismo estilo. Entonces es posible que tengas algunas cosas diferentes, algunos colores o tallas y así sucesivamente Y luego sigues adelante y haces referencia al CSS caer a las etiquetas de cabeza. Sí, básicamente, eso es lo que hice en ese segundo paso. Entonces, primer paso creando un directorio, y segundo paso creando la interfaz básica y agregando el peaje CSS a eso Si simplemente creaste el código HTML, y luego cuando terminas tu aplicación, creaste un archivo CSS. Eso también está perfectamente bien. O incluso si empezaste con el archivo Python directamente, eso también está bien. Algunos desarrolladores comienzan desde el front-end y otros comienzan desde el back-end. Eso está perfectamente bien. Entonces, una vez que tuve la interfaz, luego seguí adelante y creé un archivo de aplicación. Entonces una app dot py fol estas cuatro versiones son solo para demostración para este video. Entonces lo hice para diferentes archivos para mostrarte las etapas por las que pasé para construir mi código final. Entonces Versión uno, esto es lo que hice básicamente. Yo importé estas bibliotecas. Entonces desde FAS, importé la clase FLASK habitual y normalmente renderizé el método de plantilla para devolver las plantillas HML Y sabía que mi aplicación implicaba algún envío de usuarios, así que alguna solicitud de post. Por lo tanto, incluí allí también el método de solicitud, y luego el método de archivo enviado, que se utiliza para enviar un archivo al navegador para su descarga. Y si, eso es sobre FAS, y luego queremos geocodificar datos, ¿verdad Entonces lo subo desde codificadores Geo Pi o, lo ingreso nominando y también Una vez que le ingresé las dependencias, luego seguí adelante y creé una instancia de FAS justo aquí, y luego tres funciones que por ahora, no hacen nada Entonces la primera sería la página de inicio, como tú aquí con esta barra diagonal inversa Y nombro ese índice, la función, y simplemente devuelvo plantilla de render. Y por supuesto aquí va punto índice HML. Entonces esto renderizará la página de inicio, que es índice punto HML Entonces lo siguiente que podrías esperar es, ya sabes, que el usuario esté en tu página web. Y una vez que el usuario presiona el botón de elegir caída, y selecciona un archivo, y luego presiona enviar. Lo que quieres hacer cuando presionan el botón enviar es que quieres ahora cargar ese archivo en Python, y quieres leerlo como un marco de datos de pandas, y quieres calcular una columna de coordenadas donde calculas la latitud y longitud a una columna de coordenadas donde calculas la latitud y longitud partir de la columna de dirección usando geo Pi Entonces fuera de la columna de coordenadas, se quiere calcular la latitud y la longitud. Así que hemos hecho esto previamente en el curso en la sección de panel, y luego eventualmente, quieres devolver un marco de datos y quieres enviar ese marco de datos a través de un método de plantilla de render. Quieres enviar ese marco de datos aquí abajo. Entonces de lo que estamos hablando aquí es que estamos hablando de crear una función que haga todo esto. Entonces lee la caída de CZ y procesa con paneles, y luego muestra la tabla. La tabla ASO del marco de datos. Y creé la función Sutter y llamé a la tabla de éxito Si recuerdas, eso tiene que tener el parámetro methods igual a post porque estamos esperando una postsolicitud. Y entonces tenemos otra función más. A esta descarga lo llamo otoño. Entonces esa es la URL, tabla de tablero de éxito, y este es un nombre de función. Que tenemos otra URL y otra función adjunta a esa URL. Entonces llamo a esta descarga. Como dije, cada vez que el usuario hace algo, quiere crear un decorador y una función unida a eso Entonces primero, el usuario hará un envío, y quieres plasmarlo en esta función. Tabla de éxito, y luego lo siguiente que hará el usuario es que presionará el botón de descarga que se mostrará aquí abajo. Y eso tiene que desencadenar otra función en Python, y eso tiene que activar el método send file en Python, que enviemos el archivo al usuario. Eso significa que necesitamos otra función aquí llamada download. Al menos así lo nombré. De todos modos, pasemos a la versión dos nula. Entonces mira la diferencia aquí y aquí. La función index sigue siendo la misma. Entonces eso es todo lo que hacemos para el índice. Es bastante sencillo. Simplemente devolvemos el índice inicial que es plantilla ML. Y entonces aquí he añadido bastante carga de código. Y básicamente, lo que tenemos es que revisamos la solicitud. Si recibimos una solicitud de correo, entonces obtengo el archivo usando request dot falls, y el archivo aquí es el nombre. Toda la entrada aquí. Entonces sí, lo que sucede es que cuando el usuario presiona el botón enviar que está aquí, se activa una URL, y luego esa URL es URL para la función de tabla de subrayado de éxito Entonces esta función aquí. Eso significa que esta función será ejecutada, y luego creamos allí un marco de datos, que leerá el otoño de este otoño que estamos obteniendo del usuario, del formulario de usuario. Y luego hacemos esta nominación y ahí creamos una columna de dataframe Esto lo sabes desde la sección pandas con el método apply y luego aplicar el geocódigo a la columna de dirección. Y luego de la columna de coordenadas, obtengo una columna de latitud, y utilizo una función Lambda para extraer la latitud de cada una de las filas de coordenadas, y también cuento para n valores ahí. Y entonces no necesito esta columna de coordenadas. Entonces solo dejo eso usando el método drop, y luego convierto esto a un CSV. Aquí estoy generando un archivo CSV. Esta es la salida que queremos darle al usuario. Y estoy ordenando esto en la carpeta de subidas. Entonces solo necesitas pasar la ruta ahí, la ruta relativa carga Geocode. Así es como lo estoy nombrando . En el momento posterior voy a hacer algo más avanzado. Así que vamos a nombrarlo geocodificado por ahora, ese CSV. Y entonces lo que esto va a hacer, devolverá una plantilla, por lo que devolverá el índice esa plantilla. Pero entonces si miras aquí, déjame abrir esto a otro punto de vista. Sí, aquí tenemos una división. Node el jengibre a la sintaxis que estoy usando ahí. Entonces estoy incluyendo la variable BTN, y estoy ignorando cuándo falta eso Ahora bien, esto es diferente de aquí arriba. Aquí, estoy regresando HML como una cadena. Y aquí estoy devolviendo una plantilla HML. Entonces la sintaxis es diferente. Y esto también es diferente de cuando usamos extend. Entonces cuando extendemos un layout, extiendes un layout cuando quieras que tan pronto como el usuario visite, digamos el índice que plantilla HD Melt, el índice que placa HM Meltem mostrará otras plantillas HML Por lo que se extenderá tan pronto como el usuario visite ese índice no páginas HML la página de inicio Esto es diferente porque no queremos que esto se muestre de inmediato. Por eso estás diciendo ignorar a los desaparecidos, así que ignora eso cuando falta. E inclúyala solo cuando el usuario esté visitando esta URL de tabla de tablero de éxito. Y cuando el usuario visita eso, así que cuando el usuario presiona enviar, después de haber enviado un archivo, entonces se quiere renderizar esta plantilla HTML de descarga. Entonces lo que esto contiene es un botón aquí. Quieres generar ahí un botón, que debería ser, ya sabes, rue fall, submit. Entonces sí, obtienes este archivo de descarga ahí y también obtienes la tabla HML Entonces el marco de datos tiene una tabla HML. Entonces la primera fila, la segunda fila, la primera fila, la segunda fila. De todos modos, ese fondo ahora está unido a una referencia, lo que sugiere que cuando el usuario presiona descargar, visitará la URL de la función de descarga de Python Entonces vamos aquí, y esta URL de la función de descarga será visitada Sé lo que queremos hacer cuando el usuario visita esta URL es que queremos devolver método Enviar archivo. En realidad, esto debería ser subidas geocodificadas punto CSV. Entonces queremos enviar al usuario el archivo que generamos aquí arriba anteriormente en esta función. Queremos enviar eso al usuario bajo el nombre youfle dot CSV Y también como apego a, ya conoces este código de las conferencias anteriores. Y, eso es sobre la descarga de esa plantilla SML. Y, básicamente terminamos. O sea, puedes salirte con la tuya con esta versión del programa, y sería casi excelente si llegaras tan lejos. Sin embargo, es posible que tengamos algunos pequeños problemas con esto. El problema sería si eliges un archivo, un archivo CZ que no tiene una columna de dirección dentro, entonces una columna llamada address, entonces lo que pasaría es podrías cargar ese archivo como un marco de datos, y luego cuando intentas crear una nueva columna en el marco de datos llamada coordenadas, y luego intentas acceder a una columna existente llamada y luego intentas acceder a una columna existente a Python lanzará una flecha y detendrá la aplicación. Eso significa que cuando el usuario visita la URL de la tabla de éxito, se le mostrará una página de error. Y eso no es muy fácil de usar para. Lo que podría querer hacer en su lugar es que puede agregar alguna funcionalidad aquí que compruebe si el marco de datos, si es un archivo ingresado por el usuario, lo que desea leer el archivo como un marco de datos. Y luego en el marco de datos, comprueba si tienes una columna de dirección. Si tienes uno, entonces sigues adelante y haces los cálculos. Pero si no lo haces, entonces devuelves algo al usuario. Entonces, en lugar de devolver DF a HTML, devuelves un mensaje diciendo que lo siento, no tienes tal columna o así predeterminada. Entonces sí, te mostraré el código para eso en la próxima conferencia. Así que vea 227. Parte 2 de cómo crear la aplicación web de geocodificador +: Genial. Estamos en la versión dos, e intentaré ser rápido ahora y mostrarte versión tres. Esta es la versión tres. La forma en que implementé esta funcionalidad donde quiero verificar si hay una columna de dirección en el marco de datos es agregando una declaración try and expect. Entonces básicamente, si puedes ver la diferencia es que me sale el archivo, y luego trato de leer ese archivo. O esto también podría estar fuera de una palabra clave try. Eso no sería un problema y C fuera de una palabra clave try también. Sin embargo, esto es aún mejor porque es posible que también desee verificar si hay usuarios que envían archivos que no son CSV. Entonces aquí estamos comprobando, en realidad, que el usuario está enviando un archivo CSV. Sin embargo, eso solo significa que el archivo tiene una extensión CSV de punto en el carril del archivo. Sin embargo, eso no significa que el archivo sea en realidad CSV. Entonces es posible que tengas, digamos, un archivo MP four y hayas cambiado la extensión a CSV, pero eso sigue siendo un archivo MP four. Entonces lo que quieres hacer es, um quieres incluir DF dentro del bloque try and expect. Si Python no está siendo capaz de crear un marco de datos a partir de un archivo Epi, entonces arrojará un error Entonces eso es lo que realmente sucede si pasas Epiourfle, no podrías leerlo como Entonces sí, quieres incluir eso aquí, luego regresas igual, así que aquí no he cambiado nada. Devolves el mismo índice de plantilla en HML, y envías el HML allí y el botón Excepto si hay un error, lo que haces es devolver el índice no HML, pero luego en lugar de la tabla HML, quieres devolver este Y claro, no quieres devolver ningún botón de descarga ahí dentro. A, eso debería hacerlo. Y eso es sobre la versión tres. Entonces esas fueron las diferencias. Ahora, la versión cuatro, lo que tengo ahí. Bueno, si ven aquí, tenemos esta caída de CSV geocodificada Ahora, eso es una cuerda. Eso significa que se creará un archivo CZ de geocodificación para todos los usuarios que estarán enviando datos Ahora, eso puede causar algunos problemas porque si dos usuarios están enviando datos al mismo tiempo, es posible que tenga algunos choques de nombres ahí Entonces, lo que podrías hacer aquí es que podrías usar un módulo de datat para generar nombres únicos para cada archivo generado Y eso es lo que hice. Entonces aquí está la versión cuatro. Le pongo el módulo días tiempo aquí, y luego estoy generando el archivo CSV geocodificado aquí, así que DF a nombre de archivo CSV E hice este nombre de archivo global aquí porque también quiero acceder a él desde la función de descarga aquí. Entonces nuevamente, quiero generar eso aquí, estoy generando un nombre de archivo. Después en el nombre del archivo, tenemos la cadena upload, que apuntará al directorio donde estará este archivo. Y luego tenemos la barra. Y en realidad, este plus no debería estar ahí. Entonces justo después de la barra, tenemos el nombre del archivo. Y eso sería, ya sabes, tenemos año, y luego tenemos el mes y luego el día y luego la hora y los minutos y segundos y milisegundos. Y luego la extensión punto CSV en el nombre del archivo. Entonces sí, esto es bastante único para cada usuario porque tenemos milisegundos ahí dentro Pero déjame mostrarte cómo se ve esto, en realidad. Entonces nuevamente, el usuario elige un archivo, submit, y cuando presiona enviar, un Python generará el marco de datos y también generará el archivo CC. Entonces en esta línea aquí. Y ahora puedes encontrar ese archivo CC en la carpeta de subidas. Entonces esto se generó antes, y este es el archivo. Ese es el archivo que acabamos de generar. Entonces cuando el usuario presiona descargar, ese archivo se descargará, pero con tu nombre de archivo, que es este de aquí. De todos modos, lo que sucede es que la función obtendrá la ruta del archivo que tiene que descargar en el navegador obtendrá el nombre de caída de esta variable global Por eso estoy pasando esto como una variable global para que pueda acceder al valor de la misma, que se genera aquí, puedo acceder a este valor desde otra función. Y si, esa es mi versión de la aplicación. Sé que esta no es como tu versión. Espero que estuvieras lo más cerca posible, y sería genial que lo hicieras mejor que yo. En cualquier caso, estoy seguro que tratar de resolver esta aplicación debería haber mejorado tus habilidades de resolución de problemas en Python porque eso al menos te posicionará, así que definiremos tu nivel, tu nivel de Python para que puedas llenar los vacíos que realmente crees que no son tus puntos más fuertes. Eso fue sobre esta conferencia, y nos vemos.