Translate

2020年2月4日火曜日

◆【更新版】新型コロナウイルス感染者総数の日ごとの推移のグラフを作成する「R」のコード例


グラフのデータは、Kaggleの「Novel Corona Virus 2019 Dataset」のcsvファイルに基づいています。

新しいデータファイルには、「Date」という変数が付加されて、日付別の集計がしやすくなりました。

ただし、498行目以降の追加データの日付の形が「"%Y/%d/%m"」と、元々の日付の形「"%m/%d/%Y"」ではなかったり、元々あるデータの日付の一部の「年」が4桁でなくて、2桁だったりしました。2桁の年を4桁にするのは、Excelのシートで手作業で処理してしまいましたが、形が異なる元のデータ行と追加データ行の日付データを処理するのは、コードで行っています。

最初、「as.Date(df_cov2$Date1,format="%Y/%d/%m")」のところで、「%Y」を「%y」というようにYを小文字にしていてうまく動かず、はまってしまいました。日付の変数は、扱いが面倒だと思います。



<Rのコードの例:gganimateなどのパッケージを利用しています。>

df_cov <- read.csv("2019_nCoV_data0203.csv")

df_cov <- df_cov %>% tidyr::separate(Date, c("Date1","time"), " ",convert = TRUE)

view(df_cov)

df_cov1 <- df_cov %>% filter(Sno <= 497)
df_cov2 <- df_cov %>% filter(Sno >= 498)

df_cov1$Date1 <- as.Date(df_cov1$Date1,format="%m/%d/%Y")
df_cov2$Date1 <- as.Date(df_cov2$Date1,format="%Y/%d/%m")

df_cov3 <- rbind(df_cov1,df_cov2)

view(df_cov3)

df_cov_date <- df_cov3 %>%  group_by(Date1) %>% summarise(Conf = sum(Confirmed))

df_cov_date<- mutate(df_cov_date,Val_lbl = paste0(" ",Conf))

view(df_cov_date)

gra <- ggplot(df_cov_date, aes(x = Date1, y = Conf)) + geom_bar(stat = "identity",fill = "darkred") +
  geom_text(aes(y=Conf,label = Val_lbl,vjust =-0.25, hjust=0.5),size = 5.25 ) +
  labs(x="Date",y="Confirmed Cases",title="Confirmed cases of 2019-nCoV",caption="Data source:
       https://www.kaggle.com/sudalairajkumar/novel-corona-virus-2019-dataset/data")

gra <- gra + theme(axis.line=element_blank(),
        axis.text.x=element_text(colour="black", size=12),
        axis.text.y=element_text(colour="black", size=12),
        axis.ticks=element_blank(),
        axis.title.x=element_text(colour="black", size=14),
        axis.title.y=element_text(colour="black", size=14),
        legend.position="none",
        panel.background=element_blank(),
        panel.border=element_blank(),
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        panel.grid.major.x =element_blank(),
        panel.grid.minor.x =element_blank(),
        panel.grid.major.y = element_line( size=.2, color="grey" ),
        panel.grid.minor.y = element_line( size=.2, color="grey" ),
        plot.title=element_text(size=20, hjust=0.5, face="bold", colour="black", vjust=-1),
        plot.subtitle=element_text(size=16, hjust=0.5, face="italic", color="black"),
        plot.caption =element_text(size=9, hjust=1, face="italic", color="black"),
        plot.background=element_blank(),
        plot.margin = margin(0.5,0.5, 0.5, 0.5, "cm"))

plot(gra)

gra <- gra + transition_states(Date1, transition_length = 4, state_length = 1) +
  shadow_mark() + enter_grow() + enter_fade()

animate(gra, nframes = 200,fps = 15,start_pause = 20,duration = 20, width = 740, height = 520,renderer = gifski_renderer("ncov2.gif"))

----------------------------------------------------

---------------------------------------------------
-

0 件のコメント:

コメントを投稿