Archivos de la categoría Python

coronavirus

Coronavirus, Python y como mezclarlos para obtener información sobre la pandemia.

En estos días no se habla de otra cosa que no sea del Coronavirus aka el COVID-19. Es prácticamente imposible que pasen 5 minutos sin ver una nota, meme, audio o canción relacionado con el tema.

El colmo es que me enteré de que ya hicieron un módulo para Python que obtiene los datos de como va avanzando la pandemia en el mundo con gracias a la información proporcionada por la Universidad John Hopkins.

Trasteando un poco hice un pequeño programa para monitorear el avance del coronavirus en México. El programa muestra los casos confirmados, los muertos y la tasa de mortalidad en México y el mundo.

Instalar covid

Para poder usar el módulo hay que instalarlo con pip.

pip install covid

El código es el siguiente:

from covid import Covid
import time

covid = Covid()
covid.get_data()

casos_mexico = covid.get_status_by_country_name("mexico")

confirmados_mexico = casos_mexico['confirmed']
muertos_mexico = casos_mexico['deaths']

fechahora = time.strftime("%a, %d %b %Y %H:%M:%S %Z", time.localtime(casos_mexico['last_update']/1000))

print("                          MÉXICO")
print("                         ========")
print("       Última actualización :", fechahora)
print("          Casos confirmados : %i" % (confirmados_mexico) )
print("                    Muertos : %i" % (muertos_mexico))

tasa_letalidad_mexico = (muertos_mexico/confirmados_mexico) * 100
print("          Tasa de letalidad : %4.2f %%" % (tasa_letalidad_mexico))


confirmed = covid.get_total_confirmed_cases()
deaths = covid.get_total_deaths()

tasa_letalidad_mundial = (deaths / confirmed) * 100
print("  Tasa de letalidad mundial : %4.2f %%" % (tasa_letalidad_mundial))

Como pueden ver el código es bien sencillo. Tuve más problemas en mostrar de forma correcta la fecha y hora de la última actualización que en consultar la información.

Un programa como este puede ser muy útil para recolectar información e ir construyendo gráficas.

El único problema que tengo es que no creo en las cifras oficiales. El sistema de salud mexicano viene de problemas serios de falta de medicamentos para tratamiento de niños con cáncer, cáncer de mama, falta de vacunas y un líder moral que cree que la mejor protección contra el coronavirus es un Detente del Sagrado Corazón de Jesús (no no es broma).

Así es, este es el plan del presidente contra el coronavirus.

En estos días se dio a conocer que el costo de una prueba para el COVID-19 ronda en los 8 mil pesos mexicanos, así que no creo que este gobierno con su “austeridad republicana” (porque si hay dinero pero para otras cosas cof dos bocas cooof tren maya cooooof Santa Lucía cooof camionetas para la guardia nacional y recontra cooof) tenga la intención o el compromiso de aplicar pruebas a una población que todos los años se enfrenta a influenza, AH1N1, zika, chikunguña, dengue, sarampión o envenenamiento súbito por plomo (o sea unos buenos balazos). Pero en fin, eso es otro tema.

Por cierto, ¿Alguien sabe donde venden esos Detente? es para una investigación.

Covidify

Actualización 4-abr-2020. Lamentablemente el módulo covid dejó de funcionar hace un par de días (espero que no se haya enfermado). Y al estar buscando alguna solución di con Covidify que hace un mucho mejor trabajo que el módulo anterior.

Extrae la información, hace gráficas y lo entrega todo en un resumen en Excel (se puede abrir en LibreOffice).

Resumen de datos para México sobre el COVID19.
La recolección de datos.
Casos confirmados y los nuevos casos.
¿ Y ese brinco tan enorme en los casos recuperados?

Para utilizarlo primero tiene que instalar covidify:

pip install covidify

Y directamente desde la terminal iniciar la recolección de datos. En mi caso fue algo así:

covidify run --country="Mexico" --output="/directorio/de/salida/"

En el directorio de salida que especifiquen se van a encontrar con todos los archivos que generó el programa, pero el resumen están en el archivo en Excel.

Y hoy que estuve analizando los datos, parece que hay menos enfermos de COVID19, o es eso, o se les terminaron las pruebas.

¿A qué se debe esa caída tan brusca en el número de infectados?

Recuerden seguir las recomendaciones. Quedarse en casa, lavarse frecuentemente las manos, evitar lugares concurridos y guardar la sana distancia.

Rumbos y Azimutales, un script en Python para convertirlos.

Todos hemos visto una brújula, pero pocos saben usarla correctamente (me incluyo). El detalle es que actualmente la mayoría de los teléfonos celulares cuentan con una brújula en la que la lectura es azimutal (de 0 a 360º). De esa forma es sencillo establecer una dirección (o rumbo) a partir de nuestra posición.

Brújula de una aplicación en android - Rumbos y Azimutales
Este es un ejemplo de una aplicación para android. La lectura me dice que el rumbo es de 281º.

Pero existe la costumbre de establecer un rumbo partiendo de cuadrantes, empezando por el norte o sur, indicando un número de grados hacia el este o el oeste. Por ejemplo, 281º azimutales serían N 79º W.

O sea 79º del Norte hacia el Oeste.

Si, lo se, suena algo complicado, pero este tipo de problemas me gustan mucho, mezclar algo de geometría con programación es la onda. Así que me puse a hacer un pequeño programa en Python que haga la conversión entre un rumbo azimutal (o circular) a un rumbo cuadrantal.

Las operaciones son diferentes dependiendo de en que cuadrante se encuentre la lectura azimutal. Agregué los rumbos francos que son el norte, sur, este y el oeste. Y además un mensaje de error en caso de que se introduzca un valor fuera de rango.

Una vez que hice la función, me di a la tarea de construirle una sencilla interfaz gráfica usando PySimpleGUI , no es la interfaz más bonita, pero es realmente sencillo de hacer, me tomó una mañana más o menos entenderle a la construcción de la interfaz y al manejo de eventos.

El programa haciendo la conversión de azimutales a rumbos.
El resultado de la conversión.

Les quiero pedir disculpas si no uso los términos adecuados, no soy topógrafo, así que si existe una mejor manera de nombrar las cosas o si ofrecen algún consejo en cuanto a la programación les agradeceré su comentario.

Para entender mejor.

Descargar videos de Youtube es fácil con youtube-dl

youtube-dl para descargar videos de youtube y otros sitios.


Me ha pasado que tengo que descargar videos de Youtube para poder verlos fuera de línea en mi teléfono celular. Esta tarea es muy sencilla con youtube-dl , un programa escrito en Python que se ocupa de descargar videos de Youtube y otros sitios de internet.

youtube-dl es un programa que se utiliza desde la terminal, tiene una gran cantidad de opciones, pero en este artículo sólo tocaré lo básico.

Obtener la lista de formatos disponibles de un video.

Youtube ajusta la calidad de video de acuerdo al ancho de banda disponible en el momento de la reproducción, pero a veces esto provoca descargas de archivos muy grandes. 

La opción -F permite ver la lista de formatos disponibles para su descarga.

youtube-dl -F <<URL del video>>
youtube-dl lista de formatos disponibles.
En la primer columna se muestran los códigos de los formatos.

Descargar un formato en particular.

Para seleccionar un formato en particular está la opción -f (en minúsculas) seguido del código de formato.

Por ejemplo, si se quiere descargar el formato 18,  que es un archivo de tamaño mediano quedaría así:

youtube-dl -f 18 <<URL del video>>

Antes de descargar, hagamos una prueba.

Para hacer una prueba sin descargar el video existe la opción –simulate

Esta opción se puede agregar en cualquier instrucción y te dirá si existe algún problema antes de descargar, por ejemplo:

youtube-dl -f 18 --simulate <<URL del video>>

En lugar de –simulate se puede utilizar simplemente -s tú decides.

Descargar los videos de una lista contenida en un archivo.

Supongamos que quieres descargar varios videos, puedes guardar las URL en un archivo de texto y luego decirle a youtube-dl que tome esa información para descargar los videos.

En este caso, sería la opción –batch-file , por ejemplo:

youtube-dl --batch-file='/ruta/al/archivo.txt'

Limitar el ancho de banda.

A veces es necesario limitar el ancho de banda de la descarga, para eso usamos la opción -r , por ejemplo.

youtube-dl -r 100K <<URL del video>>

Bonus: Descargar el audio de un video en formato mp3.

A nadie sorprende la cantidad de videos musicales disponibles en Youtube, pero a veces, no quieres el video, sólo quieres el audio.

También es posible, la instrucción quedaría así:

youtube-dl --extract-audio --audio-format mp3 <<URL del video>>

Conclusiones.

Los ejemplos incluidos en este artículo son los que más utilizo y son una especie de guía rápida.

Claro que no son todas las opciones que tiene este programa. Afortunadamente tiene una excelente documentación , así que si tienes dudas o curiosidad siempre puedes consultarla.

Como youtube-dl está programado en Python prácticamente se puede descargar para cualquier sistema operativo.

Imagen principal gracias a Hello I’m Nik.