“没有什么是肯定的, 除了死亡和税收。

这不是用玫瑰床修剪整齐的绿草制作的数据集。更严重一点。让我们看看能不能在这里快速学到任何东西。数据集如下所示。

“名称”: “nchs-死亡的主要原因: 美国”,
“归因”: “国家卫生统计中心”,

公共数据集可在https://data.cdc.gov/api/views/bi63-dtpu/rows.json?accessType=DOWNLOAD

第1步:将文件下载到本地文件中 (例如 health. json)。将此文件上载到 couchbase 群集中的一个节点。

-optcochbase/cb导入 json-c couchbase://127.0.0.1-u 管理员-p dical-b 原因-d file://health.json-g toe:0-f 样本

>产生原因的主要指标;

步骤 2: 将数据导入到称为 “原因” 的存储桶中。创建存储桶后, 创建主索引。你需要这个来查询。

步骤 3。检查数据的结构。

所有数据都在一个 samgle json 文档中提供。正因为如此, infer 也帮不上忙。您必须手动检查和理解结构。这些数据在典型的政府数据集中, 在简单数组中包含大量数据, 并在元数据中给出每个实体的含义。

简单数组:

<strong>select data from cause ;</strong>

这只是包含一个没有架构的数据数组。对于公共数据集, 架构位于元字段中。

让我们将结构转换为简单的 json 键值对, 以便我们能够更有效地处理这些位。您可以在本文中了解有关这种魔力是如何发生的更多信息。


WITH cs AS (
  SELECT
    meta.`view`.columns [*].fieldName f,
    data
  FROM
    cause
)
SELECT
  o
FROM
  cs UNNEST cs.data AS d1 
LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END;

Image title

任务 1: 按年份找出一个州大多数死亡的原因。

with 子句 (csdata) 中的公共表表达式 (cte) 将复杂的 json 数据转换为平面 json。你可以动态地这样做, 也可以这样做一次, 然后再插入一个水桶, 就像我在关于纽约婴儿名字的文章中所讨论的那样。在本文中, 我使用 cde。



WITH csdata as (
  WITH cs AS (
    SELECT
      meta.`view`.columns [*].fieldName f,
      data
    FROM
      cause
  )
  SELECT
    o
  FROM
    cs UNNEST cs.data AS d1 LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END
)
SELECT
  c.o.state,
  c.o.year,
  c.o.cause_name,
  COUNT(c.o.cause_name),
  SUM(TONUMBER(c.o.deaths)) totdeaths
FROM
  csdata as c
WHERE
  c.o.state &lt;&gt; "United States"
  and c

因为名字 & 它; & gt;”一切原因” 集团 c.o.state, c.o.year, c.o.cause 名称订单总死亡人数 desc, c.o.state, c.o.year

在这种情况下, 加州所有的死亡人数都排在首位, 主要原因是其人口。

任务 2: 找出2016年每个州的主要死亡原因。

查询 2:使用上一个查询中的结果集, 然后使用 first _ value () 窗口函数来确定最大原因。按状态分区 (在 over by 子句中) 将为您提供按状态和 order by dx. todll 子句中的分区将为您提供每个状态中的最高原因。


WITH csdata as (
  WITH cs AS (
    SELECT
      meta.`view`.columns [*].fieldName f,
      data
    FROM
      cause
  )
  SELECT
    o
  FROM
    cs UNNEST cs.data AS d1 LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END
),
d2 as(
SELECT
  c.o.state,
  c.o.year,
  c.o.cause_name,
  SUM(TONUMBER(c.o.deaths)) totdeaths
FROM
  csdata as c
WHERE
  c.o.state &lt;&gt; "United States"
  and c.o.cause_name &lt;&gt; "All causes"
  and c.o.year = "2016"
GROUP BY
  c.o.state,
  c.o.year,
  c.o.cause_name),
d3 as (
SELECT dx.state, dx.cause_name, dx.totdeaths,
  FIRST_VALUE(dx.cause_name) OVER(PARTITION BY dx.state ORDER BY dx.totdeaths DESC) topreason,
  FIRST_VALUE(dx.totdeaths) OVER(PARTITION BY dx.state ORDER BY dx.totdeaths DESC) topcount
FROM d2 dx)
SELECT d3
FROM d3
WHERE d3.topcount = d3.totdeaths
order by d3.state

任务 3:按州了解从1999年到2016年的最大原因是如何变化的。

查询 3:只需生成所有年份 (1999-2016) 的报告, 然后确定最高原因, 并最终通过按状态、年份分组和获取最高原因的 max (拓扑) 来获得最高原因。

WITH csdata as (
  WITH cs AS (
    SELECT
      meta.`view`.columns [*].fieldName f,
      data
    FROM
      cause
  )
  SELECT
    o
  FROM
    cs UNNEST cs.data AS d1 LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END
),
d2 as(
SELECT
  c.o.state,
  c.o.year,
  c.o.cause_name,
  SUM(TONUMBER(c.o.deaths)) totdeaths
FROM
  csdata as c
WHERE
  c.o.state &lt;&gt; "United States" 
  and c.o.cause_name &lt;&gt; "All causes"
GROUP BY
  c.o.state,
  c.o.year,
  c.o.cause_name),
d3 as (
SELECT dx.state, dx.year,
  FIRST_VALUE(dx.cause_name) OVER(PARTITION BY dx.state, dx.year ORDER BY dx.totdeaths DESC ) topreason,
  FIRST_VALUE(dx.totdeaths) OVER(PARTITION BY dx.state, dx.year ORDER BY dx.totdeaths DESC) topcount
FROM d2 dx)
SELECT d3.state , d3.year , d3.topreason, max(d3.topcount) topcount
FROM d3
GROUP BY d3.state, d3.year, d3.topreason
order by d3.state, d3.year

下面是部分结果。



可视化这给我们提供了以下直方图。

Image title

Comments are closed.