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.