Translate

2020年1月17日金曜日

◆Excelを使わないデータ分析・処理:国立感染症研究所のインフルエンザの「定点当たり報告数」の時系列データを「年単位」から「シーズン単位」にする「R」のコード

 国立感染症研究所のインフルエンザの「定点当たり報告数」の時系列データは、「年単位」で、週別になっています。

 例えば、10月から12月の推移をグラフ化するのであれば、何の問題もないのですが、インフルエンザは、12月から2月にかけて流行するので、12月から2月にかけての推移をグラフ化したくなります。

 年別の週別データなので、年別の折れ線グラフの場合、例えば2019年12月の週と2019年1月の週が結び付いてしまいます。

 2019年12月と2020年1月を結び付けるには、「年単位」を「シーズン単位」にする必要があります。

 方法はいろいろあると思いますが、とりあえず、「R」のコードで「年単位」を「シーズン単位」にしてみました。

 以前であれば、Excelのシート上で、コピペしたりして表を整形していたところですが、その方法は繰り返し作業には向いていませんし、ミスをする可能性も高いです。

 「R」のコードで対処する方法は、繰り返し作業に向いていて、コピペのミスも防げます。


とりあえず、「R」を始めるのに参考になります


1:まず、行が年、週が列というワイド型(横型)のデータをロング型(縦型)にします。

df_inftidy <- df_inf %>% gather(key=weeks,influ,2:54)
df_inftidy <- as.data.frame(df_inftidy)


2:インフルエンザシーズンは「第36週から翌年の第35週まで」なので、各年の第36週以降の「年」をそのままとし、第1週から第35週までの「年」から1を引き算した「年」の値の列(インフルエンザシーズンの列)を追加します。
 このことによって、例えば、2019年のデータの場合、第36週以降は2019年シーズンのもの、第35週以前は2018年のシーズンのものにすることができます。

 つまり、第36週以降はそのままの「年」の数字の列(インフルエンザシーズンの列)、第1週から第35週は、「年マイナス1」の数字の列(インフルエンザシーズンの列)を作成します。

 そのための方法としては、「第36週以降」のデータフレームと「第1週から第35週」のデータフレームの2つを作成して合体させる方法にしてみました。

df_inftidys1 <- df_inftidy %>% mutate(influ_season1=year_n -1) %>% filter(week_n <= 35)
df_inftidys2 <- df_inftidy %>% mutate(influ_season1=year_n) %>% filter(week_n >= 36)

df_inftidys3 <- rbind(df_inftidys1,df_inftidys2 )
df_inftidys3 <- df_inftidys3 %>% mutate(influ_season = paste0(influ_season1,"年シーズン"))

df_inftidys4 <- df_inftidys3 %>%  filter(influ_season1 >= 16)
df_inftidys4 <- na.omit(df_inftidys4)
df_inftidys4 <-  df_inftidys4 %>% filter(week_n >= 36 | week_n <= 1)


3:インフルエンザシーズンは、「第36週から翌年の第35週まで」なので、グラフの軸で「週」を用いる場合に、その順番に並べるために、「週」の変数をファクター型にして、順番を定義します。

 なお、下記のような文字列は、Excelで「"」「W36」「",」といった3列を用意し、各セルを「&」で文字列結合して、できた列を行方向に変換して作成すると、手早く作成できます。

df_inftidys4$weeks <- factor(df_inftidys4$weeks, levels=c("W36", "W37", "W38", "W39", "W40", "W41", "W42", "W43", "W44", "W45", "W46", "W47", "W48", "W49", "W50", "W51", "W52", "W53", "W01", "W02", "W03", "W04", "W05", "W06", "W07", "W08", "W09", "W10", "W11", "W12", "W13", "W14", "W15", "W16", "W17", "W18", "W19", "W20", "W21", "W22", "W23", "W24", "W25", "W26", "W27", "W28", "W29", "W30", "W31", "W32", "W33", "W34", "W35"
))




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

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

0 件のコメント:

コメントを投稿