发布于 2026-01-06 2 阅读
0

利用公共数据分析新冠疫情的政治影响 概要洞察 获取我们的数据集 设置数据库并导入数据 分析总结

通过公共数据分析新冠疫情的政治影响

核心洞察

获取我们的数据集

设置数据库并导入数据

分析

概括

今天早些时候,我看到一篇关于美国现任总统政府计划如何分发新冠病毒检测的文章。文章称,政府正在讨论是否将检测盒分发给病例相对较少的农村地区,而不是新冠病毒感染呈几何级数增长的城市热点地区。大多数公共卫生专家都认为,广泛的检测有助于重启经济,而美国经济的主要驱动力恰恰在于城市中心。表面上看,这项决定似乎带有政治色彩。

因此,我着手通过数据来展示这些政治考量可能是什么。如果我们能将新冠疫情数据与某个地区的政治倾向和经济影响结合起来分析,结果会怎样?我们就能确定计划行动的后果,并促使决策者采取相应的行动。

幸运的是,这些数据是存在的,而且是公开的。整合这些信息可以帮助政府官员优先分配有限的资源,从而优化医疗效果,避免更大的经济灾难。

为了完成这项分析,我需要合并三个公开数据集:

需要特别说明的是:我并非流行病学家或任何领域的专家。公开数据供所有人使用,本教程旨在帮助我们利用这些公开数据来了解我们周围的世界。我还想补充一点,想要深入了解这场危机的相关数据并不丢人,同样,选择与数据隔绝也无可厚非。我们每个人应对焦虑和压力的方式都不同,在这个特殊的历史时刻,花时间去理解和欣赏彼此的差异将大有裨益。

核心洞察

通过这项分析,我得出以下几点结论:

  • 北加州的确诊病例和死亡人数均低于南加州(我的假设是,北加州周末天气一直很糟糕,因此更容易遵守社交疏离令,但本文中的数据并未证实这一假设)。
  • 按照目前新冠肺炎的增长率,投票支持唐纳德·特朗普总统的县,其报告的感染和死亡人数比投票支持希拉里·罗德姆·克林顿国务卿的县大约落后5-7天。
  • 支持特朗普总统的县占全国国内生产总值(GDP)的三分之一,而支持希拉里·克林顿的县占全国国内生产总值的三分之二。
  • 选择将资源部署到投票支持特朗普总统的县,而忽视投票支持希拉里·克林顿的县,将加剧整个国家的经济灾难。
  • 根据布鲁金斯学会的数据,投票支持特朗普总统的县比投票支持希拉里·克林顿的县少了3100万人口。

现在不是搞政治的时候,但我们却面临着政治考量左右决策的风险。将资源投入农村地区而牺牲城市地区或许是一种明智的政治策略,但这却极有可能加剧新冠肺炎疫情造成的全国性健康和经济危机。

接下来将逐步指导您如何获取数据并得出自己的结论。

获取我们的数据集

如前所述,我们将使用三个不同的数据集。其中两个数据集位于 GitHub 上,而另一个数据集可以通过美国政府网站免费获取。

首先,我们克隆所需的两个 GitHub 仓库:

git clone https://github.com/nytimes/covid-19-data.git
git clone https://github.com/MEDSL/county-returns.git

至于GDP数据:

  1. 点击“交互式数据”,然后选择“按县和都市区划分的GDP”。
  2. 在出现的屏幕中,点击“按县和都市区划分的国内生产总值(GDP)”。
  3. 点击“国内生产总值(GDP)概要(CAGDP1)”。
  4. 您需要“县”数据,即“美国所有县”的数据,但就我们的目的而言,我们只需要“实际GDP”。
  5. 在本教程中,您只需要“2018”年的数据。
  6. 选择“下载”,然后选择“Excel”。我们需要在 Microsoft Excel 中进行一些处理来清理这个数据集。

我写了一篇关于清理公共数据的博文,建议您阅读。在这个例子中,您需要删除电子表格顶部和底部的行,将 FIPS 和 GDP 列转换为数字,并将少数几个“(NA)”替换为零。最后,将文件保存为 CSV 格式。

如果您不想自己下载和处理数据集,您可以从我的 GitHub 仓库获取 CSV 文件。

设置数据库并导入数据

我们需要:设置数据库、创建表并导入数据。

建立数据库

在本教程中,我将使用TimescaleDB,这是一个开源的时间序列数据库(也是我的雇主)。使用 TimescaleDB 最简单的方法是注册 Timescale Cloud。您将获得 300 美元的免费额度,这足以完成本教程。本安装指南将帮助您快速上手 TimescaleDB。

请务必按照 TimescaleDB 安装说明安装 psql并测试是否可以连接到数据库。

在继续操作之前,请创建您的数据库(我们将其命名为 ` nyt_covid<database_name>`),并添加 TimescaleDB 扩展:

CREATE DATABASE nyt_covid;
\c nyt_covid
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

创建表

我们将创建以下表格:

  • counties
  • states
  • elections
  • gdp

该脚本将创建具有正确架构的表,并创建相应的超表和数据视图(我们将在后续分析中使用它们):

CREATE TABLE "states" (
    date DATE,
    state TEXT,
    fips NUMERIC,
    cases NUMERIC,
    deaths NUMERIC
);
SELECT create_hypertable('states', 'date', 'state', 2, create_default_indexes=>FALSE);
CREATE INDEX ON states (date ASC, state);

CREATE TABLE "counties" (
    date DATE,
    county TEXT,
    state TEXT,
    fips NUMERIC,
    cases NUMERIC,
    deaths NUMERIC
);
SELECT create_hypertable('counties', 'date', 'county', 2, create_default_indexes=>FALSE);
CREATE INDEX ON counties (date ASC, county);

CREATE TABLE "elections" (
    year NUMERIC,
    state TEXT,
    state_abbreviation TEXT,
    county TEXT,
    fips NUMERIC,
    office TEXT,
    candidate TEXT,
    party TEXT,
    votes NUMERIC,
    total_votes NUMERIC,
    version TEXT    
);

CREATE VIEW northern_california AS
SELECT date, sum (cases) as total_cases, sum (deaths) as total_deaths
FROM counties
WHERE county IN ('San Francisco', 'Santa Clara', 'Alameda', 'Marin', 'San Mateo', 'Contra Costa') AND state = 'California'
GROUP BY date
ORDER BY date DESC;

CREATE VIEW southern_california AS
SELECT date, sum (cases) as total_cases, sum (deaths) as total_deaths
FROM counties
WHERE county IN ('Los Angeles', 'Ventura', 'Orange', 'San Bernardino', 'Riverside') AND state = 'California'
GROUP BY date
ORDER BY date DESC;

CREATE TABLE "gdp" (
    fips NUMERIC,
    county TEXT,
    dollars NUMERIC
);

完成后,您可以运行该\d命令psql,应该会得到类似这样的结果:

                List of relations
 Schema |        Name         | Type  |   Owner   
--------+---------------------+-------+-----------
 public | clinton_counties    | view  | tsdbadmin
 public | counties            | table | tsdbadmin
 public | elections           | table | tsdbadmin
 public | gdp                 | table | tsdbadmin
 public | northern_california | view  | tsdbadmin
 public | southern_california | view  | tsdbadmin
 public | states              | table | tsdbadmin
 public | trump_counties      | view  | tsdbadmin
(8 rows)

摄取数据

现在,让我们导入数据。我们有三个数据集,分布在四个文件中:

  • us-counties.csv:来自《纽约时报》的各县新冠疫情数据
  • us-states.csv:来自《纽约时报》的各州新冠疫情数据
  • countypres_2000-2016.csv:麻省理工学院提供的各县选举结果
  • county-gdp.csv您通过 Excel 保存的文件,其中包含来自美国商务部的各县 GDP 数据。

《纽约时报》的 COVID-19 数据可以直接使用,所以我们不需要清理该文件。而且您已经使用 Excel 清理了 GDP 数据。

选举数据需要进行一些清理工作,将“NA”值替换为零。以下awk脚本将为我们执行此替换:

awk -F, '{if($5 == "NA") $5="0"; if($9 == "NA") $9="0"; if($10 == "NA") $10="0";}1' OFS=,  countypres_2000-2016.csv > countyresults.csv

最后,让我们用它psql来加载数据,以便进行分析:

\COPY counties FROM us-counties.csv CSV HEADER;
\COPY states FROM us-states.csv CSV HEADER;
\COPY elections FROM countyresults.csv CSV HEADER;
\COPY gdp FROM county-gdp.csv CSV HEADER;

您可以使用简单的 SQL 查询来测试数据导入,例如:

SELECT * 
FROM counties 
ORDER BY date desc 
LIMIT 25;

你应该会得到类似这样的结果:

    date    |     county      |     state      | fips  | cases | deaths 
------------+-----------------+----------------+-------+-------+--------
 2020-04-01 | Yuma            | Arizona        |  4027 |    12 |      0
 2020-04-01 | Yuma            | Colorado       |  8125 |     2 |      0
 2020-04-01 | Yolo            | California     |  6113 |    28 |      1
 2020-04-01 | Yellow Medicine | Minnesota      | 27173 |     1 |      0
 2020-04-01 | Yazoo           | Mississippi    | 28163 |     9 |      0
 2020-04-01 | Yankton         | South Dakota   | 46135 |     8 |      0
 2020-04-01 | Yadkin          | North Carolina | 37197 |     3 |      0
 2020-04-01 | Wyoming         | New York       | 36121 |    10 |      1
 2020-04-01 | Wyandot         | Ohio           | 39175 |     2 |      0
 2020-04-01 | Wright          | Iowa           | 19197 |     1 |      0
 2020-04-01 | Wright          | Minnesota      | 27171 |     6 |      0
 2020-04-01 | Wright          | Missouri       | 29229 |     4 |      0
 2020-04-01 | Woodson         | Kansas         | 20207 |     3 |      0
 2020-04-01 | Woodruff        | Arkansas       |  5147 |     1 |      0
 2020-04-01 | Woodbury        | Iowa           | 19193 |     4 |      0
 2020-04-01 | Wood            | Ohio           | 39173 |    15 |      0
 2020-04-01 | Wood            | Texas          | 48499 |     1 |      0
 2020-04-01 | Wood            | West Virginia  | 54107 |     2 |      0
 2020-04-01 | Wood            | Wisconsin      | 55141 |     2 |      0
 2020-04-01 | Winona          | Minnesota      | 27169 |    10 |      0
 2020-04-01 | Winneshiek      | Iowa           | 19191 |     3 |      0
 2020-04-01 | Winchester city | Virginia       | 51840 |     5 |      0
 2020-04-01 | Wilson          | North Carolina | 37195 |    15 |      0
 2020-04-01 | Wilson          | Tennessee      | 47189 |    45 |      0
 2020-04-01 | Wilson          | Texas          | 48493 |     5 |      0
(25 rows)

分析

让我们利用这些数据来回答几个问题。

按时间倒序排列,全国趋势是什么?

我们的 SQL 查询语句如下所示:

SELECT date, sum (cases) as total_cases, sum (deaths) as total_deaths
FROM states
GROUP BY date
ORDER BY date DESC;

结果如下(因篇幅限制已裁剪):

    date    | total_cases | total_deaths 
------------+-------------+--------------
 2020-04-01 |      214461 |         4841
 2020-03-31 |      187834 |         3910
 2020-03-30 |      163796 |         3073
 2020-03-29 |      142161 |         2486
 2020-03-28 |      123628 |         2134
 2020-03-27 |      102648 |         1649
 2020-03-26 |       85533 |         1275
 2020-03-25 |       68515 |          990
 2020-03-24 |       53938 |          731

按时间倒序排列,各州的发展趋势是什么?

现在我们需要调整 SQL 查询,并且还要按时间倒序和字母顺序对结果进行排序GROUP BYstate

SELECT date, state, cases, deaths
FROM states
GROUP BY date, state, cases, deaths
ORDER BY date DESC, state ASC;

结果应该如下所示(因篇幅限制已裁剪):

    date    |          state           | cases | deaths 
------------+--------------------------+-------+--------
 2020-04-01 | Alabama                  |  1106 |     28
 2020-04-01 | Alaska                   |   143 |      2
 2020-04-01 | Arizona                  |  1413 |     29
 2020-04-01 | Arkansas                 |   624 |     10
 2020-04-01 | California               |  9816 |    212
 2020-04-01 | Colorado                 |  3346 |     80

加利福尼亚州(或我的州)的各个地区情况如何?

在这种情况下,我们将调整查询,按县进行搜索。这应该能让我们大致了解 COVID-19 在我们感兴趣的每个州的传播地理分布情况。因此,我们将搜索该counties表,并使用 SQLWHERE子句进行筛选,提供我们感兴趣的州的名称:

SELECT date, county, cases, deaths
FROM counties
WHERE state = 'California'
GROUP BY date, county, cases, deaths
ORDER BY date DESC, county ASC;

结果应该如下所示(因篇幅限制已裁剪):

    date    |     county      | cases | deaths 
------------+-----------------+-------+--------
 2020-04-01 | Alameda         |   380 |      8
 2020-04-01 | Alpine          |     1 |      0
 2020-04-01 | Amador          |     3 |      1
 2020-04-01 | Butte           |     8 |      0
 2020-04-01 | Calaveras       |     3 |      0
 2020-04-01 | Colusa          |     1 |      0
 2020-04-01 | Contra Costa    |   250 |      3

北加州和南加州有什么区别?

之前我们创建了两个视图northern_californiasouthern_california回顾一下,以下是CREATE VIEW脚本中关于北加州的语句。它查询北加州的所有县。在这种情况下,我们需要构建WHERE子句,以便它在指定的州内搜索特定的县。您可能会惊讶于美国有多少县的名称是重复的:

CREATE VIEW northern_california AS
SELECT date, sum (cases) as total_cases, sum (deaths) as total_deaths
FROM counties
WHERE county IN ('San Francisco', 'Santa Clara', 'Alameda', 'Marin', 'San Mateo', 'Contra Costa') AND state = 'California'
GROUP BY date
ORDER BY date DESC;

我们想查看这两个地区按日期前后的对比数据。我们可以运行两个查询,如下所示:

SELECT * FROM northern_california;
SELECT * FROM southern_california;

但将它们并排显示将有助于我们的分析。为此,我们将使用UNION ALLSQL 中的函数合并这两个查询,并crosstabview使用 PostgreSQL(TimescaleDB 所基于的数据库)中的函数将结果并排排列:

SELECT *, 'NorCal' AS region FROM northern_california
WHERE date >= current_date - interval '10' day
UNION ALL
SELECT *, 'SoCal' AS region FROM southern_california
WHERE date >= current_date - interval '10' day
GROUP BY date, region, total_cases, total_deaths
ORDER BY date DESC, region DESC \crosstabview region date total_cases;

我们的结果应该如下所示:

 region | 2020-04-01 | 2020-03-31 | 2020-03-30 | 2020-03-29 | 2020-03-28 | 2020-03-27 | 2020-03-26 | 2020-03-25 | 2020-03-24 | 2020-03-23 
--------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------
 SoCal  |       4909 |       4216 |       3466 |       2982 |       2472 |       2118 |       1695 |       1197 |        950 |        761
 NorCal |       2519 |       2257 |       2121 |       1825 |       1692 |       1556 |       1358 |       1122 |        978 |        854
(2 rows)

使用 Grafana 绘制数据图表

Grafana是一款用于时间序列数据的开源可视化工具。您可以按照此教程安装 Grafana 。您需要设置一个连接到 TimescaleDB 实例的新数据源。如果您使用的是 Timescale Cloud,则可以在 Timescale Cloud 门户的“概览”选项卡中找到此信息:

图片

Grafana 设置完成后,您可以创建一个新的仪表板和一个新的可视化图表。可视化图表方面,我们将使用简单的折线图。

  • 在“常规”选项卡中,将“标题”设置为“加利福尼亚州北部和南部”。
  • 在“可视化”选项卡中,将“绘制模式”设置为“柱状图”,并取消选中“线条”。在“堆叠和空值”部分,启用“堆叠”。
  • 在“查询”选项卡中,单击“查询”下拉菜单选择您的数据源。然后,单击“编辑 SQL”并输入以下内容:
SELECT date as "time", 'NorCal' AS region, total_cases
FROM northern_california
GROUP BY date, region, total_cases
ORDER BY date

点击“添加查询”按钮,向可视化图表添加第二个查询,并添加以下查询:

SELECT date as "time", 'SoCal' AS region, total_cases
FROM southern_california
GROUP BY date, region, total_cases
ORDER BY date

您的查询和图表现在应该如下所示:

图表 + 查询北加州与南加州确诊病例

(以下是图表的单独视图)

放大查看北加州与南加州确诊病例图表

病例数的变化率是多少?

每日变化率可以很好地反映事件变化的速度。结合原始数据,我们可以了解在抗击 COVID-19 疫情方面是否取得了进展。为了计算变化率,我们将使用time_bucketTimescaleDB 中的函数。顾名思义,时间段划分功能允许我们将结果按预定义的时间段进行划分。例如,我们可以查看每日或每隔几天的变化率。在本例中,让我们查询 COVID-19 病例每日变化率:

SELECT time_bucket('1 day', date) AS day,
       state,
       cases,
       lag(cases, 1) OVER (
           PARTITION BY state
           ORDER BY date
       ) previous_day,
       round (100 * (cases - lag(cases, 1) OVER (PARTITION BY state ORDER BY date)) / lag(cases, 1) OVER (PARTITION BY state ORDER BY date)) AS rate_of_change
FROM states
WHERE date >= current_date - interval '10' day
GROUP BY date, state, cases
ORDER BY date DESC, rate_of_change DESC;

我们的结果应该如下所示(因篇幅限制已省略部分内容):

    day     |          state           | cases | previous_day | rate_of_change 
------------+--------------------------+-------+--------------+----------------
 2020-04-01 | Northern Mariana Islands |     6 |            2 |            200
 2020-04-01 | Tennessee                |  2440 |         1834 |             33
 2020-04-01 | Nebraska                 |   249 |          193 |             29
 2020-04-01 | Oklahoma                 |   719 |          566 |             27
 2020-04-01 | Idaho                    |   669 |          526 |             27
 2020-04-01 | Louisiana                |  6424 |         5237 |             23
 2020-04-01 | Michigan                 |  9293 |         7630 |             22
 2020-04-01 | Virginia                 |  1511 |         1250 |             21
 2020-04-01 | Puerto Rico              |   286 |          239 |             20
 2020-04-01 | South Carolina           |  1293 |         1083 |             19

如果您愿意,也可以将其排列成按州排序的交叉表:

SELECT time_bucket('1 day', date) AS day,
       state,
       cases,
       lag(cases, 1) OVER (
           PARTITION BY state
           ORDER BY date
       ) previous_day,
       round (100 * (cases - lag(cases, 1) OVER (PARTITION BY state ORDER BY date)) / lag(cases, 1) OVER (PARTITION BY state ORDER BY date)) AS rate_of_change
FROM states
WHERE date >= current_date - interval '10' day
GROUP BY date, state, cases
ORDER BY date DESC, state ASC \crosstabview state day rate_of_change;

您的结果应该如下所示(为节省空间已省略部分内容):

          state           | 2020-04-01 | 2020-03-31 | 2020-03-30 | 2020-03-29 | 2020-03-28 | 2020-03-27 | 2020-03-26 | 2020-03-25 | 2020-03-24 | 2020-03-23 
--------------------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------
 Alabama                  |         11 |          5 |         14 |         15 |         13 |         19 |         39 |         60 |         23 |     [null]
 Alaska                   |          8 |         12 |          4 |         12 |         20 |         23 |         17 |         40 |         17 |     [null]
 Arizona                  |          9 |         11 |         26 |         20 |         16 |         31 |         26 |         23 |         39 |     [null]
 Arkansas                 |         11 |         11 |         13 |         10 |          6 |         10 |         14 |         33 |         15 |     [null]
 California               |         14 |         16 |         18 |         13 |         13 |         21 |         28 |         20 |         18 |     [null]
 Colorado                 |         12 |         14 |         14 |         12 |         19 |         21 |         32 |         19 |         26 |     [null]

新冠疫情的传播与选举数据有何关联?

鉴于我们的政治领导层已将原本纯粹的公共卫生讨论转变为政治和党派讨论,因此在了解 COVID-19 的传播和影响时,考虑政治因素可能很重要。

我们从麻省理工学院选举数据科学实验室获得的选举数据按以下方式组织,这与我们之前为表格设置的模式相符elections

  • year选举(本数据集中的数据可追溯至2000年
  • statecounty及其对应的fips代码,是美国政府使用的标准数字标识)
  • candidate
  • 候选人votes收到的选票,以及total_votes选举结果

数据集中还有其他字段,但它们与我们这里的分析无关。

我们可以先将选举数据细分为投票支持特朗普总统的县和投票支持希拉里·克林顿的县。为此,我们将创建两个 SQL 视图,每个视图都包含一个子查询:

-- find all Trump counties
CREATE VIEW trump_counties AS
SELECT * FROM (
    SELECT year, state, county, fips, last(candidate, votes) as winner, max(votes) as winning_votes
    FROM elections 
    WHERE year = 2016
    GROUP BY year, state, county, fips 
    ORDER BY year, state, county
) all_winners 
WHERE winner = 'Donald Trump';

-- find all Hillary Clinton counties
CREATE VIEW clinton_counties AS
SELECT * FROM (
    SELECT year, state, county, fips, last(candidate, votes) as winner, max(votes) as winning_votes
    FROM elections 
    WHERE year = 2016
    GROUP BY year, state, county, fips 
    ORDER BY year, state, county
) all_winners 
WHERE winner = 'Hillary Clinton';

现在,我们来看看所有投票支持特朗普总统的县的病例和死亡人数。为了执行此查询,我们将使用一个基于县“FIPS”代码的子查询。由于我们使用了来自三个不同来源的公共数据集,因此我们需要考虑县名可能存在的差异,例如拼写错误、使用特殊字符等等。使用统一的数字FIPS代码可以让我们跨表匹配查询:

SELECT counties.date, sum (counties.cases) as total_cases, sum (counties.deaths) as total_deaths
FROM counties
WHERE counties.fips IN (SELECT fips FROM trump_counties) AND date >= current_date - interval '10' day
GROUP BY date
ORDER BY date DESC;

我们的结果应该如下所示:

    date    | total_cases | total_deaths 
------------+-------------+--------------
 2020-04-01 |       43339 |          903
 2020-03-31 |       37101 |          702
 2020-03-30 |       31466 |          553
 2020-03-29 |       26802 |          455
 2020-03-28 |       22692 |          404
 2020-03-27 |       18704 |          317
 2020-03-26 |       14997 |          230
 2020-03-25 |       11726 |          174
 2020-03-24 |        9353 |          126
 2020-03-23 |        7363 |           96
(10 rows)

我们可以通过替换视图来运行类似的查询,查找投票支持希拉里·克林顿的县clinton_counties,并获得以下结果:

    date    | total_cases | total_deaths 
------------+-------------+--------------
 2020-04-01 |      116490 |         2178
 2020-03-31 |      101935 |         1769
 2020-03-30 |       88163 |         1393
 2020-03-29 |       76400 |         1129
 2020-03-28 |       66035 |         1029
 2020-03-27 |       55193 |          854
 2020-03-26 |       44653 |          641
 2020-03-25 |       35046 |          512
 2020-03-24 |       28361 |          400
 2020-03-23 |       22702 |          314
(10 rows)

将新冠疫情传播与选举数据绘制成图表

让我们通过 Grafana 可视化来查看我们对 COVID-19 病例和选举数据的分析结果。

在 Grafana 中,添加一个新面板并选择“图表”可视化。这次,我们将创建一个简单的折线图,并使用所有默认设置。确保在“查询”下拉列表中选择了正确的数据集,然后单击“编辑 SQL”添加以下查询:

SELECT counties.date as "time", sum (counties.cases) as trump_cases
FROM counties
WHERE counties.fips IN (SELECT fips FROM trump_counties)
GROUP BY date
ORDER BY date DESC;

添加另一条查询语句,点击“编辑 SQL”,然后输入以下内容:

SELECT counties.date as "time", sum (counties.cases) as clinton_cases
FROM counties
WHERE counties.fips IN (SELECT fips FROM clinton_counties)
GROUP BY date
ORDER BY date DESC;

最终的可视化效果应该如下所示:

特朗普执政县与克林顿执政县新冠肺炎确诊病例数对比图表及查询

(并放大查看图表本身)

特朗普执政县与克林顿执政县新冠肺炎确诊病例的放大图表

那么经济影响如何呢?

我们可以使用按县划分的国内生产总值 (GDP) 数据来查看全国以及每个县的 GDP 情况。首先,让我们使用本教程中运行的最简单的查询,看看我们的数据集中包含了多少 GDP 总量:

SELECT sum(dollars)
FROM gdp;

我们的计算结果为 18,452,822,315.00 美元,接近 18.5 万亿美元。该国的实际GDP 略高一些,但我们的数据集涵盖了 18.5 万亿美元。

现在,我们可以比较一下病例超过100例的县的GDP:

SELECT sum(dollars) AS total_gdp
FROM gdp
WHERE gdp.fips IN (SELECT fips FROM counties WHERE cases > 100 AND date = current_date - 1);

最终结果(11,229,517,359.00 美元)约占我们数据集中 GDP 总和的 61%。(当然,这些结果会根据您运行这些查询的时间而有所变化。)

把所有内容整合起来

我们知道,到目前为止,投票给希拉里·克林顿的县在新冠肺炎病例总数和死亡人数方面受到的打击比投票给特朗普总统的县要严重得多。

通过这条查询语句,我们可以看到投票支持特朗普总统的各县的GDP总额:

SELECT sum(dollars) AS total_gdp
FROM gdp
WHERE gdp.fips IN (SELECT fips FROM trump_counties);

这相当于约 6.3 万亿美元,相当于美国国内生产总值的三分之一。

可以对投票支持希拉里·克林顿的县进行类似的查询:

SELECT sum(dollars) AS total_gdp
FROM gdp
WHERE gdp.fips IN (SELECT fips FROM clinton_counties);

这些县的经济总量为 11.9 万亿美元,占美国国内生产总值的 2/3。

为了避免更大的经济灾难,美国政府应该尽快稳定那些没有投票支持特朗普总统的县,因为这些县的GDP占美国GDP总量的三分之二,甚至超过了那些投票支持他的县。虽然相关性并不等同于因果关系,我们也愿意对每个人都抱有善意,但有一点是毋庸置疑的:在健康和经济危机期间搞政治,会损害所有美国人的利益。

概括

数据让我们更深入地了解周围的世界。通过运用数据,我们可以更好地为身心健康和财务状况做出决策。这篇文章将为你介绍数据提取和查询的大部分方法。基于数据进行分析和推断是一门艺术,而且始终需要解读。我非常期待看到你的解读和进一步的分析。

正如你所见,将多个公共数据集整合在一起非常有趣。我还在Timescale 的同事们的帮助下发起了一个线上聚会,这样我就可以结识志同道合的朋友,并持续学习新知识。如果你也是一位数据爱好者,欢迎随时加入我们——人越多越热闹!

最后,请务必遵守当地公共卫生部门的所有指导方针。让我们互相照应,友善待人,尽自己的一份力,尽可能安全地度过这段时期。

文章来源:https://dev.to/coolasspuppy/analyzing-the-politics-of-covid-19-through-public-data-22fe