Обзор практического примера для визуализации роста Covid-19

С тех пор, как COVID-19 был впервые зарегистрирован в конце декабря 2019 года в Китае, он распространился по всему миру и был объявлен Всемирной организацией здравоохранения пандемией. Из-за этого миллиарды людей были отправлены в изоляцию, поскольку службы здравоохранения изо всех сил пытаются справиться с этим. Теперь, в августе 2020 года, возникает много вопросов о том, должны ли студенты вернуться в школу лично в течение нового семестра, могут ли предприятия, такие как рестораны, возобновить регулярную работу и должны ли страны усилить свои предыдущие меры изоляции.

Многие из этих решений должны приниматься специалистами в области здравоохранения, занимающимися данными, и не должны приниматься в вакууме, в отсутствие данных. Процесс анализа данных имеет множество аспектов, и визуализация данных является очень важным аспектом. Визуализация данных - это процесс получения информации и ее преобразования в визуальный контекст, такой как график. Большинство людей склонны соглашаться с тем, что взглянуть на график и понять основную идею намного проще, чем прочитать таблицу чисел, особенно с большими наборами данных. Поэтому, чтобы понять распределение случаев COVID-19 по странам, а также то, как COVID-19 распространяется в этих странах, я собираюсь пройти упражнение по визуализации данных.

Весь анализ будет проводиться в R с использованием tidyverse, и данные могут быть извлечены из общедоступного хранилища данных (ссылка в справочном разделе).

library(tidyverse)
library(ggthemes) # contains the theme used for the graphs

Первый шаг - загрузить данные в мою среду и убедиться, что они структурированы соответствующим образом для визуального анализа.

covid_df <- read_csv('file_path'+'file_name')
glimpse(covid_df)

Этот набор данных содержит такие переменные, как дата, страна, провинция, долгота, широта, количество случаев заболевания на заданную дату и то, были ли эти случаи подтвержденными положительными случаями, выздоровлением или смертельным исходом. Для этого анализа меня интересуют дата, страна и количество подтвержденных положительных случаев. Поэтому я выберу эти столбцы и создам новый фрейм данных только с интересующими переменными.

Однако при проверке вывода glimpse(covid_df) было обнаружено, что переменная даты была проанализирована как символьный тип, а не как тип даты, и тип случая также был проанализирован как символ, тогда как он должен был быть фактором. Таким образом, я конвертирую переменные в соответствующий тип данных, а затем создаю новый фрейм данных.

covid_df$date <- parse_date(covid_df$date, format="%m/%d/%Y")
covid_df$type <- parse_factor(covid_df$type)
confirmed_cases <- covid_df%>%
  filter(type=="confirmed")%>%
  select(c("date", "country", "cases"))

Теперь, когда у меня есть интересующие данные, было бы полезно понять, как во всем мире растет COVID-19. Поскольку в базе данных содержится много стран, и для нескольких стран разумно иметь подтвержденные положительные случаи в один и тот же день, для этого требуется, чтобы данные были сгруппированы по дате, а затем агрегированы для определения общего количества случаев за день. Кроме того, чтобы понять рост, было бы целесообразно рассчитать совокупную сумму случаев с течением времени.

confirmed_cases_total <- confirmed_cases%>%
  group_by(date)%>%
  summarise(Total_cases= sum(cases))%>% #aggregates by day
  mutate(Cumulative_cases = cumsum(Total_cases)) #calc cumulative
ggplot(confirmed_cases_total, aes(x=date, y=Cumulative_cases))+
  geom_line()+
  scale_y_log10()+
  scale_x_date(date_breaks = "months", date_labels = "%b-%Y")+
  ylab("Cumulative Cases")+
  xlab("Date")+
  ggtitle("Cumulative World Covid-19 Cases per day")+
  theme_tufte()

График показывает, что число случаев COVID-19 во всем мире быстро увеличивалось в период с января по февраль, замедлилось в начале марта, а затем снова быстро увеличилось после середины марта. Также можно увидеть, что текущий уровень новых случаев ниже, чем показатель с середины марта по апрель, но количество случаев во всем мире все еще увеличивается.

Хотя в ранний период вспышки заболевание было в основном сконцентрировано в Китае, Соединенные Штаты быстро стали предметом озабоченности. Поэтому в следующий раз я построю график сравнения Соединенных Штатов с остальным миром, чтобы получить представление о росте числа дел в течение марта и в последующий период.

------------------ # Data 
UnitedStates_confirmed_cases <- confirmed_cases%>%
  filter(country=="US")%>%
  group_by(date)%>%
  summarise(Total_cases = sum(cases))%>%
  mutate(Cumulative_cases = cumsum(Total_cases))
UnitedStates_confirmed_cases$Location <- as.factor(rep("USA", nrow(UnitedStates_confirmed_cases))) #creating memebership variable
NotUnitedStates_confirmed_cases <- confirmed_cases%>%
  filter(country!="US")%>%
  group_by(date)%>%
  summarise(Total_cases = sum(cases))%>%
  mutate(Cumulative_cases = cumsum(Total_cases))
NotUnitedStates_confirmed_cases$Location <- as.factor(rep("USA", nrow(NotUnitedStates_confirmed_cases)) #memebership variable
usa_vs_world <- rbind(UnitedStates_confirmed_cases, NotUnitedStates_confirmed_cases) #combining the two df's
------------------ # Graph
ggplot(usa_vs_world, aes(x=date, y=Cumulative_cases, color=Location))+
  geom_line()+
  scale_y_log10()+
  scale_x_date(date_breaks = "months", date_labels = "%b-%Y")+
  xlab("Date")+ 
  ylab("Cumulative Cases")+ 
  ggtitle("Cumulative Covid-19 Cases per day, USA vs The World")+
  theme_tufte()

Эти две кривые имеют схожие формы; он показывает, что число подтвержденных случаев заболевания в Соединенных Штатах быстро увеличивалось в течение марта, и этот быстрый рост продолжался до апреля. Хотя это действительно дает представление о скачке числа случаев, наблюдаемых на первом графике, также можно увидеть, что в остальном мире все еще наблюдается быстро растущее число подтвержденных случаев в течение и после марта.

По этой причине я сравню Соединенные Штаты и Китай, чтобы определить сходства и различия между вспышками в этих странах.

------------------ # Data
UnitedStates_confirmed_cases$Country <- UnitedStates_confirmed_cases$Location
UnitedStates_confirmed_cases$Location <- NULL
China_confirmed_cases <- confirmed_cases%>%
  filter(country == "China")%>%
  group_by(date)%>%
  summarise(Total_cases= sum(cases))%>%
  mutate(Cumulative_cases = cumsum(Total_cases))
China_confirmed_cases$Country <- as.factor(rep("China", nrow(confirmed_cases_China)))
USAvsChina <- rbind(China_confirmed_cases, UnitedStates_confirmed_cases)
------------------ # Graph
ggplot(USAvsChina, aes(x=date, y=Cumulative_cases, color=Country))+
  geom_line()+
  scale_y_log10()+
  scale_x_date(date_breaks = "months", date_labels = "%b-%Y")+
  xlab("Date")+ 
  ylab("Cumulative Cases")+
  ggtitle("Cumulative Covid-19 Cases per day, USA vs China")+
  theme_tufte()

График показывает, что по мере того, как Соединенные Штаты продолжали расти в подтвержденных случаях, Китай относительно выровнялся. Таким образом, случаи Китая не объясняют скачок, замеченный на предыдущих графиках.

Итак, какие страны способствуют постоянному росту случаев COVID-19? Было бы идеально определить, какие страны являются лидерами по общему количеству подтвержденных положительных случаев.

Hardest_hit_Countries <- confirmed_cases%>%
  group_by(country)%>%
  summarise(Total_cases = sum(cases))%>%
  arrange(desc(Total_cases))%>%
  top_n(5)

Результат Hardest_hit_Countries показывает таблицу из 5 стран с наибольшим количеством подтвержденных положительных случаев. Из этой таблицы можно сделать вывод, что Соединенные Штаты являются ведущей страной в этом отношении с общим количеством 4823 890 случаев. За США следует Бразилия с 2 859 073 случаями; Индия - 1 964 536 случаев; Россия - 864 948 случаев; и Южная Африка с 529 877 случаями.

Чтобы понять относительный вклад этих стран в рост числа случаев COVID-19 во всем мире с течением времени, можно создать график, сравнивающий рост в этих странах по сравнению с остальным миром. Если бы эти страны несли ответственность за неровности, наблюдаемые на предыдущих графиках, то линия, представляющая остальной мир, была бы намного более плоской по сравнению с той же линией на предыдущих графиках.

График показывает, что на наиболее пострадавшие страны приходится значительная часть роста числа случаев в течение и после марта, тогда как на США приходится большая часть случаев в марте. Однако в марте в остальном мире все еще наблюдается заметный подъем. Причина этого в том, что наиболее часто встречающийся фильтр определяет, в каких странах в настоящее время зарегистрировано наибольшее количество случаев COVID-19, и, возможно, это были разные страны в марте.

Чтобы определить, какие страны были наиболее пострадавшими в рассматриваемый период, я обновлю фильтр наиболее пострадавших и определю, какие страны сейчас возглавляют чарты.

Hardest_hit_Countries_before_may <- confirmed_cases%>%
  filter(date <= "2020-04-01")%>%
  group_by(country)%>%
  summarise(Total_cases = sum(cases))%>%
  arrange(desc(Total_cases))%>%
  top_n(5)

Выходные данные этого фрейма данных теперь показывают, что Соединенные Штаты по-прежнему остаются лидирующей страной с 214 205 случаями. Однако теперь за США следует Италия с 110 574 случаями заболевания; Испания - 104 118 случаев; Китай с 82361 случаями; и Германия - 77 872 случая.

Эти цифры также предполагают, что в Соединенных Штатах увеличилось более чем на 2000% с точки зрения количества подтвержденных положительных случаев в период с 1 апреля по 5 августа. Сумасшедший.

Итак, теперь, зная, что количество подтвержденных положительных случаев в Соединенных Штатах резко увеличилось, какую долю во всем мире составляют Соединенные Штаты? Фактически, было бы интересно понять, какую долю подтвержденных случаев приходится на каждую страну.

share_of_cases <- confirmed_cases%>%
  group_by(country)%>%
  summarise(Total_cases = sum(cases))%>%
  mutate(p_of_total_cases = (Total_cases/sum(Total_cases))*100)%>%
  arrange(desc(p_of_total_cases))%>%
  mutate(cumulative_p_of_total_cases = cumsum(p_of_total_cases))

Результаты share_of_cases показывают, что случаи в 3 странах в настоящее время составляют ~ 50% подтвержденных положительных случаев COVID-19 во всем мире, тогда как случаи в США составляют ~ 26%; случаи в Бразилии составляют ~ 15%; и случаи в Индии составляют ~ 10%. Это особенно беспокоит, поскольку этот набор данных содержит 188 стран. Следовательно, это означает, что на менее 2% стран в этом наборе данных приходится ~ 50% случаев во всем мире.

Результаты также показывают, что случаи заболевания в 14 странах в настоящее время составляют ~ 75% подтвержденных положительных случаев COVID-19 во всем мире. Теперь этот показатель по-прежнему предполагает, что случаи сконцентрированы в нескольких странах, но он сравнительно лучше, чем случаи в трех странах, на которые приходится ~ 50% случаев во всем мире.

Последнее, что я сделаю, - это создам график, показывающий рост подтвержденных положительных случаев в Соединенных Штатах, при этом аннотируя ключевые события, например, когда была объявлена ​​пандемия и когда во всех штатах были введены меры изоляции.

------------------ # Data
usa_events <- tribble(
  ~date, ~event, 
  "2020-01-30", "Global Health\nEmergency", 
  "2020-03-11", "Pandemic\nDeclared",
)%>%
  mutate(date = as.Date(date))
------------------ # Graph
ggplot(confirmed_cases_USA) +
  geom_line(mapping=aes(x=date, y=Cumulative_cases)) +
  geom_smooth(mapping=aes(x=date, y=Cumulative_cases), method="loess")+
  geom_vline(aes(xintercept = date), data=usa_events, linetype="dashed")+
  geom_text(aes(x=date, label=event), data=usa_events, y=3000000)+
  annotate("rect", xmin =as.Date("2020-03-19", "%Y-%m-%d"), xmax=as.Date("2020-04-24", "%Y-%m-%d"), ymin=0, ymax=6000000, alpha=0.25)+
  annotate("text", x=as.Date("2020-04-06", "%Y-%m-%d"), y=4000000, label="All States Lockdown")+
  theme_tufte()+
  scale_x_date(date_breaks="months", date_labels="%b-%Y")+
  xlab("Date")+
  ylab("Cumulative Cases")+
  ggtitle("United States Cumulative COVID-19 Cases")

Этот график показывает, что в Соединенных Штатах количество подтвержденных положительных случаев COVID-19 продолжает увеличиваться квадратично, несмотря на предыдущие меры по изоляции. Это вызывает дополнительную озабоченность, поскольку некоторые штаты выступают против продолжения (или повторного осуществления) мер изоляции.

Что касается упомянутых ранее вопросов о студентах, ресторанах и аналогичных предприятиях, а также о других странах, директивным органам следует продолжать отслеживать дела в пределах своей юрисдикции и принимать наилучшее решение с учетом их обстоятельств. Коронавирус определенно никуда не делся, и любые решения, принимаемые в отношении здоровья и безопасности, должны в значительной степени основываться на данных.

Ссылки:

Репозиторий данных: «github.com/RamiKrispin/coronavirus

Код: github.com/trisxcj1/visualizing-covid19

Tidyverse.org/

Другой полезный материал:

Tidyverse.org/learn/

R-bloggers.com/why-learn-the-tidyverse/

Linkedin.com/learning/learning-the-r-tidyverse

Dplyr.tidyverse.org/

Linkedin.com/in/rick-scavetta/