対数plotで推移を見たいんだが何故かあまり見かけないのでちょっと暇があったので、自分で書いてみた。
1
元データは(とりあえず東京でいいやということで)、 https://stopcovid19.metro.tokyo.lg.jp ここにあるのは分かって、「テーブルを表示」を選択すると日毎の新規感染者数がちゃんと見れるので、これをplotするだけ。
どうせなら、URL指定して R から直接読みたいなと思ったら、「オープンデータを入手」から「探索」タブでダウンロードを選んだらなんと一人づつの情報が取れてしまう。
そうじゃなくて…、と思ったが、まあ R は統計解析向けの処理系だからヒストグラム書くぐらい簡単にできるだろと思ったのでなんとか手でこねくり回してみた。
とりあえず、table()
とかやるとヒストグラム化できるっぽい(返ってきたデータをどう加工できるのかは不明)。
標準的なplot()
命令で対数プロットは普通にかける。
str(dat)
で列名などが確認でき、$列名
で参照すればいい。
# CSV読み込み。普通にURLで指定できる
dat <- read.csv('https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv')
# データの確認
str(dat)
# "公表_年月日"列でカウントできる(返ってくるのはなんかのテーブル構造)
dat2 <- table(dat$公表_年月日)
# log plotする。0を含んでいたので範囲指定必要
plot(dat2, log="y", ylim=c(1,1e4))
こんな、欲しかった絵が得られた。
やっぱりサチってるよなぁ
2
曜日の効果を消してみたくて、まずはこんなことをしてみた
# 年月日と曜日2D hist
dat3 <- table(dat$公表_年月日, dat$曜日)
# hist3Dはplot3Dに含まれているのでパッケージ読み込み
library(plot3D)
# 描画
hist3D(z=dat3, border = "black", phi=10, theta=-30)
こんな図が得られる。
plot3Dは最初install.packages("plot3D")
でインストールしてやる必要があった(どこにインストールされるのかは不明)。
残念ながらhist3Dの対数プロットはできなさそう。
ついでに、日付と曜日でグリッドが切られているのでbinがちょー薄い。
そして一番の問題は、曜日が(年月日もだが)文字列に過ぎないので、文字コード順か何かになって意図した曜日順に並んでくれない。
> head(dat3)
火 金 月 水 土 日 木
2020-01-24 0 1 0 0 0 0 0
2020-01-25 0 0 0 0 1 0 0
2020-01-30 0 0 0 0 0 0 1
2020-02-13 0 0 0 0 0 0 1
2020-02-14 0 2 0 0 0 0 0
2020-02-15 0 0 0 0 8 0 0
3
要するに、週番号と曜日番号を年月日文字列から一旦Dateクラスを経由して生成してやる必要があって、
dat$n1 <- as.Date(dat$公表_年月日)
dat$n2 <- format(dat$n1, "%U")
dat$n3 <- format(dat$n1, "%w")
dat4 <- table(dat$n2, dat$n3)
hist3D(z=dat4, border = "black", phi=45, theta=25)
とか作ってやれば
> tail(dat4)
0 1 2 3 4 5 6
27 111 102 106 75 224 243 206
28 206 119 143 165 286 293 290
29 188 168 237 238 366 260 295
30 239 131 266 250 367 463 472
31 292 258 309 263 360 462 429
32 331 197 188 222 206 389 0
欲しかったデータは作れているっぽい。
しかしhist3Dで対数プロットできないのはつらいなぁ。あと、角度を急にしてみると描画が結構バグる。