Обзор практического примера для визуализации роста 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
Другой полезный материал:
R-bloggers.com/why-learn-the-tidyverse/