Följande artikel hjälper dig: Animera framsteg och varianter av Covid-19 över tid – Mot AI
Ursprungligen publicerad på Towards AI the World’s Leading AI and Technology News and Media Company. Om du bygger en AI-relaterad produkt eller tjänst inbjuder vi dig att överväga att bli AI-sponsor. På Towards AI hjälper vi att skala AI och nystartade teknologier. Låt oss hjälpa dig att släppa loss din teknik till massorna.
Datavisualisering
Använder R och GGanimate
Jag älskar GGanimate-funktionen i GGPlot som låter dig lägga till en fjärde dimension till vilken plot du än gör. Därför är det här inte det första inlägget jag tillskriver att jag bygger GIF-filer med R. Men när något är roligt, tenderar du att upprepa det. Så låt oss göra detta kort och gott.
rm(lista = ls())bibliotek (tidyverse)bibliotek (läsare)bibliotek (ggthemes)bibliotek (smörja)bibliotek (zoo)bibliotek(gganimate)bibliotek (cowplot)
Jag laddade ner Covid-data från OWID och en del data från det holländska nationella institutet för folkhälsa och miljö. Jag har skrivit om denna specifika tekniska del tidigare på LinkedIN.
getwd()data_mapp url namn download.file(url = url, destfile = paste0(data_mapp,namn))setwd(data_mapp)Covidowid_covid_data url namn download.file(url = url, destfile = paste0(data_mapp,namn))setwd(data_mapp)varianter delim = “;”, escape_double = FALSE, trim_ws = TRUE)
Sedan omvandlade jag uppgifterna för att efterlikna artikeln från New York Times om att Omikron kan ha några underliggande hot. Så vad jag gjorde var att koppla ihop infektioner, inläggningar och dödsfall genom att använda glidande medelvärden, logvärden och fördröjningar.
dfländer dfNLD %dplyr::filter(iso_code == “NLD”)%>%dplyr::select(date,iso_code,date,new_cases_per_million, new_deaths_per_million)%>%dplyr::mutate(cases_07da = zoo::rollmean(new_cases_per_million, k = 7, fill = NA),deaths_07da = zoo::rollmean(new_deaths_per_million, k = 7, fill = NA),deathdate_21plus = datum – 21)huvud (dfNLD)ggplot(dfNLD)+geom_line(aes(x=datum, y=log(cases_07da), colour=”New Cases”))+geom_line(aes(x=deathdate_21plus, y=log(deaths_07da), colour=”New Deaths”))+skala_färgmanual(namn=””,värden=c(‘röd’, ‘grå’), etiketter = c(“Fall”, “Dödsfall 21 dagar senare”))+theme_bw()+theme(legend.position=”bottom”)+labs(x=”Datum”, y=”Nya fall och nya dödsfall (loggskala)”, title=”Nya fall vs nya dödsfall på en 7-dagars glidande medelvärdesloggskala”)
dfNLD %dplyr::filter(iso_code == “NLD”)%>%dplyr::select(date,iso_code,date,new_cases_per_million, icu_patients_per_million)%>%dplyr::mutate(cases_07da = zoo::rollmean(new_cases_per_million, k = 7, fill = NA),ICU_07da = zoo::rollmean(icu_patients_per_million, k = 7, fill = NA),ICUdate_14plus = datum – 14)ggplot(dfNLD)+geom_line(aes(x=datum, y=log(cases_07da), colour=”New Cases”))+geom_line(aes(x=ICUdate_14plus , y=log(ICU_07da), colour=”New ICU”))+skala_färgmanual(namn=””,värden=c(‘röd’, ‘grå’), etiketter = c(“Fall”, “ICU 14 dagar senare”))+theme_bw()+theme(legend.position=”bottom”)+labs(x=”Datum”, y=”Nya fall och ICU (loggskala)”, title=”Nya fall vs ICU på en loggskala för 7-dagars glidande medelvärde”)
dfNLD %dplyr::filter(iso_code == “NLD”)%>%dplyr::select(date,iso_code,date,new_cases_per_million, hosp_patients_per_million)%>%dplyr::mutate(cases_07da = zoo::rollmean(new_cases_per_million, k = 7, fill = NA),hosp_07da = zoo::rollmean(hosp_patients_per_million, k = 7, fill = NA),HOSPdate_14plus = datum – 14)ggplot(dfNLD)+geom_line(aes(x=datum, y=log(cases_07da), colour=”New Cases”))+geom_line(aes(x=HOSPdate_14plus , y=log(hosp_07da), colour=”New Hospital”))+skala_färgmanual(namn=””,värden=c(‘röd’, ‘grå’), etiketter = c(“Fall”, “Sjukhus 14 dagar senare”))+theme_bw()+theme(legend.position=”bottom”)+labs(x=”Datum”, y=”Nya fall och sjukhus (loggskala)”, title=”Nya fall vs sjukhus på en loggskala för 7-dagars glidande medelvärde”)
dfNLD %dplyr::filter(iso_code == “NLD”)%>%dplyr::select(date,iso_code,date,new_cases_per_million, hosp_patients_per_million,icu_patients_per_million,new_deaths_per_million)%>%dplyr::mutate(cases_07da = zoo::rollmean(new_cases_per_million, k = 7, fill = NA),hosp_07da = zoo::rollmean(hosp_patients_per_million, k = 7, fill = NA),HOSPdate_14plus = datum – 14,deaths_07da = zoo::rollmean(new_deaths_per_million, k = 7, fill = NA),deathdate_21plus = datum – 21,ICU_07da = zoo::rollmean(icu_patients_per_million, k = 7, fill = NA),ICUdate_14plus = datum – 14)ggplot(dfNLD)+geom_line(aes(x=datum, y=log(cases_07da), colour=”New Cases”))+geom_line(aes(x=HOSPdate_14plus , y=log(hosp_07da), colour=”New Hosp”))+geom_line(aes(x=ICUdate_14plus , y=log(ICU_07da), colour=”New ICU”))+geom_line(aes(x=deathdate_21plus, y=log(deaths_07da), colour=”New Deaths”))+skala_färgmanual(namn=””,values=c(‘grå’, ‘röd’, ‘grön’, ‘blå’), etiketter = c(“Fall”, “Sjukhus 14 dagar senare”, “ICU 14 dagar senare”,”Dödsfall 21 dagar senare”))+theme_bw()+theme(legend.position=”bottom”)+labs(x=”Datum”, y=”Nya fall, sjukhus, intensivvård och dödsfall (loggskala)”, title=”Nya fall vs sjukhus, intensivvårdsavdelning och dödsfall på en loggskala för 7-dagars glidande medelvärde”)
knitr::opts_chunk$set(fig.width=unit(25,”cm”), fig.height=unit(11,”cm”))dfNLD%dplyr::filter(iso_code == “NLD”)%>%dplyr::select(date,iso_code,date,new_cases_per_million, hosp_patients_per_million,icu_patients_per_million,new_deaths_per_million)%>%dplyr::mutate(cases_07da = zoo::rollmean(new_cases_per_million, k = 7, fill = NA),hosp_07da = zoo::rollmean(hosp_patients_per_million, k = 7, fill = NA),HOSPdate_14plus = datum – 14,deaths_07da = zoo::rollmean(new_deaths_per_million, k = 7, fill = NA),deathdate_21plus = datum – 21,ICU_07da = zoo::rollmean(icu_patients_per_million, k = 7, fill = NA),ICUdate_14plus = datum – 14)min.animationgeom_line(aes(x=datum, y=log(cases_07da), colour=”New Cases”))+geom_line(aes(x=HOSPdate_14plus , y=log(hosp_07da), colour=”New Hosp”))+geom_line(aes(x=ICUdate_14plus , y=log(ICU_07da), colour=”New ICU”))+geom_line(aes(x=deathdate_21plus, y=log(deaths_07da), colour=”New Deaths”))+skala_färgmanual(namn=””,values=c(‘grå’, ‘röd’, ‘grön’, ‘blå’), etiketter = c(“Fall”, “Sjukhus 14 dagar senare”, “ICU 14 dagar senare”,”Dödsfall 21 dagar senare”))+theme_bw()+theme(legend.position=”bottom”)+labs(x=”Datum”, y=”Nya fall, sjukhus, intensivvård och dödsfall (loggskala)”, title=”Nya fall vs sjukhus, intensivvårdsavdelning och dödsfall på en loggskala för 7-dagars glidande medelvärde”)+transition_reveal(date)animera(my.animation, width=2000, height=1000, res=150,end_pause = 60,nframes=300);anim_save(“Covid.gif”)
Som du kan se krävs det bara en enkel rad på GGplot-koden för att animera föregående figur. Men det ger det en helt annan dimension.
Vad jag nu vill lägga till i figuren är utvecklingen av varianterna. Lyckligtvis har vi den datan också, så låt oss ladda den, rita den och ansluta den. Jag animerade inte den informationen lika bra, även om jag kunde ha det. Jag lämnar den övningen till dig.
variants_sum%group_by(Date_of_statistics_week_start,Variant_name)%>%summarize(ss=summa(Sample_size),vc=summa(Variantfall), perc=(vc/ss)*100)variants_sum$datecombinedgeom_line(aes(x=datum, y=log(cases_07da), colour=”New Cases”))+geom_line(aes(x=HOSPdate_14plus , y=log(hosp_07da), colour=”New Hosp”))+geom_line(aes(x=ICUdate_14plus , y=log(ICU_07da), colour=”New ICU”))+geom_line(aes(x=deathdate_21plus, y=log(deaths_07da), colour=”New Deaths”))+skala_färgmanual(namn=””,values=c(‘grå’, ‘röd’, ‘grön’, ‘blå’), etiketter = c(“Fall”, “Sjukhus 14 dagar senare”, “ICU 14 dagar senare”,”Dödsfall 21 dagar senare”))+theme_bw()+theme(legend.position=”bottom”)+labs(x=”Datum”, y=”Nya fall, sjukhus, intensivvård och dödsfall (loggskala)”, title=”Nya fall vs sjukhus, intensivvårdsavdelning och dödsfall på en loggskala för 7-dagars glidande medelvärde”)+scale_x_date(limits = as.Date(c(“2021-01-03”, “2022-02-18”)))g2aes(x=datum,fill=Variantnamn))+geom_area(aes(y=perc), alfa=0,5)+theme_bw()+labs(x=”Datum”, y=”Antal varianter / provstorlek “, fill=”Variantnamn”,title=”Variantprogression över tid i NL “)+theme(legend.position = “bottom”)+scale_x_date(limits = as.Date(c(“2021-01-03”, “2022-02-18”)))grid.arrange(g1,g2, ncol=1) plot_grid(g1, g2, align = “v”, nu = 2, rel_heights = c(2/3, 1/3))
Så där har vi det. Nu kunde spaltens spridning kanske varit bättre, men det överlåter jag också till dig. Njut av!
Animering av Covid-19-framsteg och varianter över tid publicerades ursprungligen i Towards AI on Medium, där människor fortsätter samtalet genom att lyfta fram och svara på den här historien.
Publicerad via Mot AI