¿Cómo trazar datos en una página web desde un conjunto de datos gratuito que se actualiza a diario?

Aug 17 2020

Estoy usando los datos que están disponibles en los enlaces a continuación para obtener datos sobre casos confirmados de COVID-19 en Colombia. Estoy modelando los casos acumulativos con un modelo no lineal y todo está bien. Esto se ha hecho descargando los datos para trabajar localmente. Sé que existen mecanismos para el desarrollo web y mucho de lo que necesito lo encontré en esta comunidad, excepto que no sé cómo hacer que los gráficos se actualicen automáticamente a partir de los datos que se encuentran en los enlaces de una página web.

https://www.datos.gov.co/Salud-y-Protecci-n-Social/Casos-positivos-de-COVID-19-en-Colombia/gt2j-8ykr/data

https://www.datos.gov.co/w/gt2j-8ykr/dneh-mcp2?cur=i2Z4n-Qy94T&from=root

¡Gracias por tus sugerencias!

Respuestas

4 flinty Aug 16 2020 at 23:18

Parece utilizar Socrata para gestionar los datos. No tengo experiencia con esta API, pero parece que puede acceder a ella utilizando este formulario de URL:

https://www.datos.gov.co/Salud-y-Protecci-n-Social/Casos-positivos-de-COVID-19-en-Colombia/gt2j-8ykr

De acuerdo con la documentación de Socrata , puede solicitar estos datos en un particular $offsety $limitproporcionándolos como parámetros en la URL. Este es un pequeño nicho y está más allá del alcance de Mathematica Stack Exchange, pero es de esperar que esto lo ayude a comenzar:

(* fetch 10 records starting from offset 0 *)
request = 
  HTTPRequest["https://www.datos.gov.co/resource/gt2j-8ykr.json",
   <| Method -> "GET", "Query" -> {"$limit" -> 10, "$offset" -> 0}, 
    CharacterEncoding -> "UTF8"|>];
response = URLExecute[request];

Luego podemos consultar las propiedades de la respuesta JSON formando un Association:

(* of our 10 records, get the first 5 cities of location *)
Association[#]["ciudad_de_ubicaci_n"] & /@ response[[1 ;; 5]]
(* {"Bogotá D.C.", "Guadalajara de Buga", "Medellín", "Medellín", "Medellín"} *)

Si desea el número total de entradas en la base de datos (casos), creo que podría usar la API de esta manera $select=count(id_de_caso):

request = 
  HTTPRequest["https://www.datos.gov.co/resource/gt2j-8ykr.json",
   <| Method -> "GET", 
      "Query" -> {"$select" -> "count(id_de_caso)", "$offset" -> 0}, 
      CharacterEncoding -> "UTF8"|>];
response = URLExecute[request];

numberOfCases = ToExpression@Values[First[response]][[1]]

(* 456689 *)

Esto coincide exactamente con los datos de Columbia en https://www.trackcorona.live/map a 16 de agosto de 2020.