【问题标题】:R - Draw cases per 100k populationR - 每 10 万人口抽取案例
【发布时间】:2021-08-26 08:48:08
【问题描述】:

我尝试为每个日期画线 COVID 病例。我没有输出,讲师只是提出问题。我解决了这个问题,但我的问题是输出。看起来很奇怪。这是问题: “对于总死亡人数最高的十个国家,绘制以下折线图,以可视化流行病是否已经开始放缓,以及这些国家的新病例/死亡人数增长率有何不同。 a) 每个日期的新病例数(绝对数与每 100.000 人)"

这是我的代码:

    library(utils)
COVID_data <-read.csv("https://opendata.ecdc.europa.eu/covid19/nationalcasedeath_eueea_daily_ei/csv", na.strings = "", fileEncoding = "UTF-8-BOM")

    #Finding ten countries where the highest absolute total deaths number is
abs_total_deaths <-COVID_data %>% 
  group_by(countriesAndTerritories) %>% 
  summarise(abs_total_deaths = sum(deaths)) %>% 
  arrange(desc(abs_total_deaths))
  
abs_ten_total_deaths <- c('Italy','France','Germany','Spain','Poland',
                          'Romania','Czechia','Hungary','Belgium','Bulgaria') 


#Calculate new cases by dividing absolute number to 100.000 population
#Draw line for each country
COVID_data %>% 
  filter(countriesAndTerritories %in% abs_ten_total_deaths) %>% 
  filter(cases >0) %>% 
  mutate(new_cases = cases/100000) %>% 
  ungroup() %>% 
  ggplot()+
  geom_line(aes(x = dateRep, y = new_cases, color = countriesAndTerritories),size=1)+
  labs(x="Date",
       y="New Cases",
       title="New Cases per 100.000 population") +
  facet_wrap(~countriesAndTerritories)+
  theme_bw()

我还将添加我的输出图片。我认为我的图表不正确,因为输出看起来很奇怪。我不明白我在哪里犯了错误。如果你帮助我,我将不胜感激。 这是输出:

【问题讨论】:

  • mutate(new_cases = cases/100000) 不会为您提供每 100000 人的比率。像mutate(new_cases = cases * 100000 /&lt;population&gt;) 这样的东西会更好,其中&lt;population&gt; 是您的人口变量。
  • @Limey 非常感谢。我修复了它,但图表看起来还是一样的。我该如何解释...您能在 x 轴上查看 March 吗?线掉下来了,正常吗?

标签: r ggplot2 dplyr tidyverse


【解决方案1】:

看看比利时,我从您的数据文件中得到总死亡人数 = 25051,这与数据 here 完全一致。

很明显,每个国家/地区的最高值(到目前为止)出现在文件中该国家/地区的最早日期“上”。在您的前十名中(我同意您的选择),除西班牙以外的每个国家/地区都是 2021 年 3 月 1 日,西班牙是 2021 年 2 月 28 日。

这两个事实使我得出以下结论:(1)您的图表正确显示了您要求他们总结的数据,并且(2)您有一个 数据人工制品:每个国家/地区的第一条记录包含迄今为止的累计总数,而后续日期包含“过去 24 小时内”报告的数据。我使用引号是因为不同的国家有不同的报告惯例。例如,在英国(自 2020 年 8 月起),“与 COVID 相关的死亡”是指在 COVID 检测呈阳性后 28 天内因任何原因导致的死亡。 Citation

因此,要获得有意义的图表,我认为您唯一的选择是丢弃每个国家/地区的第一条记录中包含的累积数据。我会这样做:

library(utils)
library(tidyverse)

COVID_data <-read.csv("https://opendata.ecdc.europa.eu/covid19/nationalcasedeath_eueea_daily_ei/csv", na.strings = "", fileEncoding = "UTF-8-BOM")

# For better printing
COVID_data <- as_tibble(COVID_data)

# Which countries have the higest absolute death toll? 
# [I get the same countries as you do.]
top10 <- COVID_data %>% 
  group_by(countriesAndTerritories) %>% 
  summarise(TotalDeaths=sum(deaths)) %>% 
  slice_max(TotalDeaths, n=10) %>% 
  distinct(countriesAndTerritories) %>% 
  pull(countriesAndTerritories)

COVID_data %>% 
  filter(countriesAndTerritories %in% top10) %>% 
  mutate(
    deathRate=100000 * deaths / popData2020,
    caseRate=100000 * cases /popData2020,
    Date=lubridate::dmy(dateRep)
  )  %>% 
  arrange(countriesAndTerritories, Date) %>% 
  group_by(countriesAndTerritories) %>% 
  filter(row_number() > 1) %>% 
  ggplot() + 
    geom_line(aes(x=Date, y=deathRate)) +
    facet_wrap(~countriesAndTerritories)

排除每个国家/地区的第一个数据行的关键部分是

  arrange(countriesAndTerritories, Date) %>% 
  group_by(countriesAndTerritories) %>% 
  filter(row_number() > 1) %>% 

调用arrange 是必要的,因为数据没有按开始的日期顺序排列。

这给出了以下情节

这更像我(我怀疑,你)所期望的。

您看到的锯齿形图案很可能还报告了人工制品:发生在周末(或公共假期)的死亡事件要到下周一(或下一个工作日)才会报告。这在英国当然是正确的。

【讨论】:

  • 非常感谢。它看起来好多了,我不知道 as_tibble func。我明白了
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
相关资源
最近更新 更多