"Nada es seguro, salvo la muerte y los impuestos".
No se trata de un conjunto de datos hecho con un lecho de rosas o césped verde cuidado. Un poco más serio. Veamos si podemos aprender algo rápidamente aquí. El conjunto de datos es el siguiente.
"name" : "NCHS - Principales causas de muerte: Estados Unidos",
"atribución" : "Centro Nacional de Estadísticas Sanitarias",
El público dataset está disponible en https://data.cdc.gov/api/views/bi63-dtpu/rows.json?accessType=DOWNLOAD
Primer paso: Descargue el archivo en un archivo local (por ejemplo, health.json). Suba este archivo a uno de los nodos del clúster de Couchbase.
Paso 2importar los datos a un bucket llamado causa. Después de crear el bucket, crea el índice primario. Lo necesitarás para realizar consultas.
/opt/couchbase/bin/cbimport json -c couchbase://127.0.0.1 -u Administrador -p contraseña -b causa -d fichero://salud.json -g causa:0 -f muestra
> CREAR ÍNDICE PRIMARIO EN causa;
Paso 3. Inspecciona la estructura de los datos.
Todos los datos se proporcionan en un ÚNICO documento JSON. Debido a esto, INFER no ayuda. Tendrás que inspeccionar y comprender la estructura manualmente. Estos datos son los típicos conjuntos de datos gubernamentales con muchos datos en matrices simples con el significado de cada entidad en los metadatos.
Matriz simple:
1 |
<fuerte>seleccione datos de causa ;</fuerte> |
Simplemente contiene una matriz de datos sin el esquema. Para los conjuntos de datos públicos, el esquema se encuentra en el campo meta.
Vamos a transformar la estructura en simples pares clave-valor JSON para que podamos manejar estos bits de manera más eficaz. Usted puede aprender más acerca de cómo se produjo esta magia en este artículo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
CON cs AS ( SELECCIONE meta.`ver`.columnas [*].fieldName f, datos DESDE causa ) SELECCIONE o DESDE cs UNNEST cs.datos AS d1 LET o = OBJETO p :d1 [ARRAY_POSITION(cs.f, p)] PARA p EN cs.f FIN; |
Tarea1: Averiguar la causa de la mayoría de las muertes en un estado, por año.
La expresión de tabla común (CTE) en la cláusula WITH (csdata) transforma los datos json complejos en JSON plano. Puedes hacer esto dinámicamente o hacerlo una vez e INSERTAR de nuevo en un bucket, como he comentado en el artículo sobre Nombres de bebé en Nueva York. En este artículo, utilizo CTEs.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
CON csdata como ( CON cs AS ( SELECCIONE meta.`ver`.columnas [*].fieldName f, datos DESDE causa ) SELECCIONE o DESDE cs UNNEST cs.datos AS d1 LET o = OBJETO p :d1 [ARRAY_POSITION(cs.f, p)] PARA p EN cs.f FIN ) SELECCIONE c.o.estado, c.o.año, c.o.nombre_de_la_causa, CONTAR(c.o.nombre_de_la_causa), SUM(TONÚMERO(c.o.muertes)) totdeaths DESDE csdata como c DONDE c.o.estado <> "Estados Unidos" y c.o.nombre_de_la_causa <> "Todas las causas" GRUPO POR c.o.estado, c.o.año, c.o.nombre_de_la_causa PEDIR POR totdeaths DESC, c.o.estado, c.o.año |
En este caso, todas las muertes de California se sitúan en cabeza, debido principalmente a su población.
Tarea 2. Averigua las principales causas de muerte en cada estado para el año 2016.
Consulta 2: Utilice el conjunto de resultados de la consulta anterior y, a continuación, utilice la función de ventana FIRST_VALUE() para determinar la causa principal. La partición por estado (en la cláusula OVER BY) le dará las particiones por estado y ORDER BY dx.totdeaths dentro de la cláusula OVER BY le dará la causa principal en cada estado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
CON csdata como ( CON cs AS ( SELECCIONE meta.`ver`.columnas [*].fieldName f, datos DESDE causa ) SELECCIONE o DESDE cs UNNEST cs.datos AS d1 LET o = OBJETO p :d1 [ARRAY_POSITION(cs.f, p)] PARA p EN cs.f FIN ), d2 como( SELECCIONE c.o.estado, c.o.año, c.o.nombre_de_la_causa, SUM(TONÚMERO(c.o.muertes)) totdeaths DESDE csdata como c DONDE c.o.estado <> "Estados Unidos" y c.o.nombre_de_la_causa <> "Todas las causas" y c.o.año = "2016" GRUPO POR c.o.estado, c.o.año, c.o.nombre_de_la_causa), d3 como ( SELECCIONE dx.estado, dx.nombre_de_la_causa, dx.totdeaths, PRIMER_VALOR(dx.nombre_de_la_causa) EN(PARTICIÓN POR dx.estado PEDIR POR dx.totdeaths DESC) topreason, PRIMER_VALOR(dx.totdeaths) EN(PARTICIÓN POR dx.estado PEDIR POR dx.totdeaths DESC) topcount DESDE d2 dx) SELECCIONE d3 DESDE d3 DONDE d3.topcount = d3.totdeaths pedir por d3.estado |
Tarea 3. Descubre cómo ha cambiado el motivo principal por año, de 1999 a 2016 por estado.
Consulta 3: Simplemente genere el informe para todos los años (199-2016) y luego determine la razón principal y finalmente obtenga la razón más alta agrupando por estado, año y obteniendo MAX(topcount) para la causa topreason.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
CON csdata como ( CON cs AS ( SELECCIONE meta.`ver`.columnas [*].fieldName f, datos DESDE causa ) SELECCIONE o DESDE cs UNNEST cs.datos AS d1 LET o = OBJETO p :d1 [ARRAY_POSITION(cs.f, p)] PARA p EN cs.f FIN ), d2 como( SELECCIONE c.o.estado, c.o.año, c.o.nombre_de_la_causa, SUM(TONÚMERO(c.o.muertes)) totdeaths DESDE csdata como c DONDE c.o.estado <> "Estados Unidos" y c.o.nombre_de_la_causa <> "Todas las causas" GRUPO POR c.o.estado, c.o.año, c.o.nombre_de_la_causa), d3 como ( SELECCIONE dx.estado, dx.año, PRIMER_VALOR(dx.nombre_de_la_causa) EN(PARTICIÓN POR dx.estado, dx.año PEDIR POR dx.totdeaths DESC ) topreason, PRIMER_VALOR(dx.totdeaths) EN(PARTICIÓN POR dx.estado, dx.año PEDIR POR dx.totdeaths DESC) topcount DESDE d2 dx) SELECCIONE d3.estado , d3.año , d3.topreason, max(d3.topcount) topcount DESDE d3 GRUPO POR d3.estado, d3.año, d3.topreason pedir por d3.estado, d3.año |
Este es el resultado parcial.
Visualizando esto obtenemos el siguiente histograma.