Chuck Huber, Director Asociado de Alcance Estadístico.
Como
muchos de ustedes, estoy trabajando desde casa y revisando las últimas noticias
sobre COVID-19 con frecuencia. Veo muchos números y gráficos, así que busqué
los "datos oficiales". Una de las mejores fuentes de datos que he
encontrado está en el sitio web de GitHub para el Centro de
Ciencias e Ingeniería de Sistemas de la Escuela de Ingeniería Johns Hopkins
Whiting. Los datos para
cada día se almacenan en un archivo separado, así que escribí un pequeño comando
Stata llamado covid19 para descargar, combinar, guardar y graficar estos
datos.
El
comando crea una tabla que contiene la fecha, el número de casos confirmados,
el número de muertes y el número de recuperados. Agregué una variable calculada
llamada newcases, que es la diferencia entre casos confirmados durante
dos días contiguos.
Los
datos originales incluyen todos los países que informan, por lo que agregué una
opción country() que me permite ver la tabla de un país en particular.
Agregué
una opción graph() que grafica el número de casos confirmados.
Figura 1. Casos confirmados de
COVID-19 en Estados Unidos
La
opción saving() guarda loa datos en un archivo llamado covid19_usa.dta.
Me gusta mi comando covid19, pero no tengo planes de
distribuirlo. No lo he probado a fondo, y podría volverse inútil si Johns
Hopkins cambia sus datos. Así que le mostraré los pasos para descargar y
procesar los datos para que pueda hacerlo usted mismo. Si los datos cambian,
tendrá las herramientas para modificar su código y descargar datos futuros.Escribir
X=J(3,4,5) en el símbolo de dos puntos, Mata
compila y ejecuta este codigo. J(r,c,v) es la función de Mata que crea una matriz rxc, dobde cada uno de sus
elemntos es v. La expresión en el lado derecho del operador = se asigna
al simbolo del lado izquierdo.
Datos de GitHub de la Universidad
Johns Hopkins
GitHub
es un sitio web/plataforma popular para el desarrollo y distribución de
software. El Centro de Ciencias e Ingeniería de Sistemas de
la Escuela de Ingeniería Johns Hopkins Whiting tiene un repositorio GitHub que
incluye datos COVID-19 actualizados regularmente de todo el mundo. Los datos en
bruto están disponibles aquí: datos de Johns Hopkins GitHub.
Figura 2. Datos de GitHub de Johns
Hopkins para COVID-19
Los
datos se almacenan en archivos .csv separados para cada día. Hagamos
clic en el archivo llamado 29-01-2020.csv para ver su contenido. Este archivo contiene datos
para la Provincia/Estado, el País/Región, la fecha y hora de la Última
Actualización, el número de casos confirmados, el número de muertes y el número
de recuperados.
Figura 3: Contenido de 01-29-2020.csv
Puede ver los datos sin procesar, delimitados por
comas haciendo clic en el botón "Sin procesar" junto a la flecha
roja. Tenga en cuenta que agregué la flecha roja; no aparece en el sitio web.
Figura 4: Datos sin procesar
delimitados por comas en 01-29-2020.csv
El nombre
del archivo es la URL en la barra de direcciones de su navegador web.
importdelimited“https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/01-29-2020.csv”
Es probable que su navegador web ajuste la URL a una
segunda línea. Tenga en cuenta que este es un comando de una línea en Stata.
Luego puedo describir (describe) y
enumerar (list) los datos en Stata.
¡Lo hicimos! ¡Importamos con éxito los datos en
bruto para el 29 de enero de 2020, desde el repositorio Johns
Hopkins de GitHub a Stata! Es solo un archivo y hay al menos un
problema obvio con los datos (la variable denominada ïprovincestate), pero es
un buen lugar para comenzar.
Usando confirm e if para arreglar
nombres de variables
Aprendí a través de prueba y error que la variable provincestate se importa
como ïprovincestate en algunos
archivos y provincestate en otros.
Queremos importar muchos archivos, y no queremos tener que revisar cada archivo
manualmente. Así que usemos confirm para verificar en cada archivo una variable llamada
ïprovincestate.
Si la variable ïprovincestate existe, el comando guardará un valor de cero en _rc.
Podemos usar este resultado en una sentencia if que renombre (rename)
y etiquete (label) correctamente la variable.
Esta
base de datos contiene la variable ïprovincestate, así que los
comandos dentro del bloque if son ejecutados. Podemos checar esto usando
describe.
Nuestra
base de datos ahora contiene una variable llamada provincestate.
Escribamos confirm variable otra vez para ver qué sucede si la variable ïprovincestate no está en nuestra base.
Esta
base de datos no contiene ninguna variable llamada ïprovincestate, por lo que confirm variable produce un
mensaje de error. Si ejecutamos confirm variable dentro de un archivo do,
el archivo do se detendrá. Podemos usar capture para permitir que nuestro do continúe ejecutándose incluso si confirm
variable produce un error.
Tenga
en cuenta que _rc es igual a 111, que no es igual a 0. Por lo tanto, el
siguiente código importará los datos sin procesar y "arreglará" ïprovincestate si
es necesario.
Usar macros para importar archivos
distintos
A
continuación, veamos cómo las macros pueden ayudarnos a importar
diferentes archivos del sitio web. Podemos almacenar palabras o números
temporalmente en la memoria usando macros. Las macros pueden ser locales o
globales. Las macros globales, una vez definidas, están disponibles en cualquier
lugar de Stata. Las macros locales existen únicamente dentro del programa o
do-file en el que están definidas. Puede definir una macro local como esta:
Puede
hacer referencia a la macro escribiendo una comilla simple a la izquierda del
nombre de la macro y una apostrofe simple a la derecha del nombre de la macro.
Podemos
crear macros al combinar otras macros, como esta:
Deseamos
importar archivos con nombres como 29-01-2020.csv. Tenga en cuenta que
el mes incluye un "cero a la izquierda". Los meses 1–9 se especifican
como “01”, “02”, etc. Los meses 10–12 se especifican como “10”, “11” y “12”.
Necesitamos una forma de asignar valores a las macros locales que incluya un
cero inicial cuando sea apropiado. La función string() es una forma de
hacer esto.
La
función string() para la macro month almacenó el número 3 en una
cadena de dos caracteres con un cero a la izquierda. La función string()
para la macro day almacenó el número 19 en una cadena de dos caracteres
con un cero inicial, pero el cero inicial no es necesario. Esto nos permitirá
especificar fechas arbitrarias con el formato correcto para los archivos que
deseamos importar.
A
continuación, consideremos el nombre de archivo completo. La mayor parte del
nombre de archivo largo es el mismo para cada archivo. Almacenemos la URL de
los nombres de archivo en una macro local.
Esto
nos permite especificar un nombre de archivo como este:
Usar bucles para importar múltiples
archivos
Podemos
repetir un comando o una colección de comandos colocándolos en un bucle. Una
forma de hacerlo es con forvalues.
forvalues month = 1/12 {
display "month = `month'"
display "month = `month'"
Note
que month está guardada como una macro local, y podemos referirla como `month' dentro
del bucle. Así, los resultados de nuestro bucle lucen así:
También
podemos crear un bucle dentro de un bucle. Por ejemplo, podemos crear un bucle
de días dentro de los meses, como esto:
Los
resultados de este ciclo son bastante largos, por lo que he omitido la mayor
parte de la salida.
Usemos
nuestro bucle para crear nombres para los archivos que deseamos descargar.
Este
ciclo también devuelve una gran cantidad de salida, por lo que he omitido la
mayor parte por brevedad. Tenga en cuenta que la función string() agrega
ceros iniciales para mes y día cuando sea necesario.
Podemos
usar la macro URL junto con import delimited para importar los
datos sin procesar de todos los días en 2020. Tendremos que borrar (clear)
la memoria de Stata antes de importar cada archivo de datos sin procesar.
Luego, podemos guardar (save) una copia de cada archivo como un conjunto
de datos Stata.
Estoy
seguro de que ya ha anticipado la falla con el código anterior. Se repite todos
los días de cada mes de 2020. Pero los archivos de datos comienzan el 21 de
enero de 2020, por lo que no hay archivos de datos para el 1 de enero. Nuestro
programa devuelve un mensaje de error.
También
se agregarán nuevos datos todos los días, y me gustaría importar datos futuros
una vez que se publiquen. Hay muchas formas inteligentes de manejar esta
situación. Una forma es simplemente preceder import delimited y save con
la capture. Los archivos de datos se importarán si existen. Si el
archivo de datos no existe, el programa continuará. Es un método lento y crudo,
pero funcionará para nuestros propósitos.
Nuestro
truco con capture funcionó, y puedo ver una lista de archivos de datos
Stata en mi directorio local.
Vamos
a abrir el archivo 01-22-2020.dta y a describir los datos.
Este
es uno de esos archivos que contienen la variable ïprovincestate.
Aprendimos cómo solucionar esto antes usando confirm e if, así
que vamos a poner nuestro "arreglo" en nuestro código y volver a
ejecutarlo. Tenga en cuenta que he agregado la opción ,replace a los
comandos de guardar porque los archivos ya existen en nuestro directorio.
Ahora
podemos describir la base de datos 01-22-2020.dta y verificar que la
variable ïprovincestate ha sido cambiada a provincestate.
Nuestro
directorio local ahora contiene una colección de bases de datos Stata que
queremos combinar en un solo archivo. Podemos hacer esto usando append.
Podemos agregar dos bases de datos manualmente de esta forma:
Pero
eso sería tedioso y tendríamos que actualizar continuamente nuestro código.
Otro ciclo nos permitiría automatizar este proceso. Tenga en cuenta que he
usado el truco de capture antes de append porque no tenemos un
archivo para todos los días de 2020.
Describí nuestros datos y noté que hay dos nuevas
variables. Algunos de los archivos de datos sin procesar contienen las
variables latitude y longitude, y se han
agregado a nuestro conjunto de datos completo.
Un listado de las últimas 10 observaciones confirma
que la base de datos incluye algunos datos para latitud y longitud.
Conclusión y objetivos para la
próxima vez
Detengámonos aquí y pensemos en lo que hemos
logrado. Hemos descargado con éxito todos los datos en bruto disponibles para
COVID-19 del repositorio GitHub de
Johns Hopkins y los hemos combinado en un único conjunto de datos
utilizando el siguiente código:
Muchos de ustedes notarán que podríamos realizar
esta tarea con un solo bucle (pista: ¡use frames!). Pero quería mantener las cosas lo más simples que
sea posible en esta publicación. Guardemos este conjunto de datos para poder
usarlo más tarde.
Hay muchas cosas que podríamos hacer con este
conjunto de datos en bruto. Podríamos crear datos de series temporales para
examinar patrones a lo largo del tiempo. Podríamos hacer esto por país o
incluso provincias o estados dentro de los países. Y tenemos información sobre
la latitud y la longitud de algunos de los datos, por lo que podríamos explorar
patrones por hora y ubicación. Discutiré esto en futuras publicaciones.
Tenga en cuenta que no hemos verificado ni limpiado
estos datos. El código anterior y los datos resultantes deben usarse solo con
fines educativos.
Eso es todo por hoy. ¡Gracias por leernos!
Muy buen aporte. Deberías poner tu canal en Youtube en caso no tengas.
ResponderBorrarEsta información puede suplir otros datos que tenga
ResponderBorrar