東京都のCOVID-19データを取ってくる(R版)

今日の東京都では366人の新規陽性者数が確認されましたね。今後どうなることやら。

catalog.data.metro.tokyo.lg.jp

統計を勉強している人は、生きているデータだとモチベーションが上がるし有用性もあるかもしれないから自分でもデータ分析してみよう、なんて考えるのではないでしょうか。すでに様々な人がプログラムを書いていると思いますが、遅ればせながら僕も東京都が公開しているデータを読み込んでグラフを書くプログラムを作ってみました。

# 東京都のサーバーからCSVを読み込む
dat_csv_url <- "https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv"
dat <- read.csv(dat_csv_url, fileEncoding="UTF-8-BOM", header=TRUE, row.names=1)

# データのクリーニング
dat <- dat[, c(4, 7, 8, 9, 15)]
colnames(dat)<- c("公表日", "居住地", "年代", "性別", "退院済")
dat$公表日<- as.Date(dat$公表日, format="%Y-%m-%d")
dat$居住地 <- factor(dat$居住地)
dat$年代 <- factor(dat$年代)
dat[dat$年代=="'-",]$年代 <- "不明"   # 年代が '- となっているものを 不明 とする
dat$年代 <- ordered(dat$年代, levels=c("10歳未満", "10代", "20代", "30代", "40代",
                    "50代", "60代", "70代", "80代", "90代", "100歳以上", "不明"))
dat$性別 <- factor(dat$性別)
dat[dat$性別=="'-",]$性別 <- "不明"   # 性別が '- となっているものを 不明 とする
dat[dat$性別=="女",]$性別 <- "女性"   # 性別が 女 となっているものを 女性 とする
dat$性別 <- factor(dat$性別)
dat$退院済 <- factor(dat$退院済, levels=c(0, 1))
dat[is.na(dat$退院済),]$退院済 <- 0   # NAのデータは未退院(0)とする

以上でデータの整理ができました。データの概要を見るためにsummaryを使ってみます。

> summary(dat)
     公表日                    居住地          年代          性別      退院済  
 Min.   :2020-01-24               : 239   20代   :3096   女性  :4072   0:2868  
 1st Qu.:2020-04-16   湖南省長沙市:   1   30代   :2058   男性  :5974   1:7186  
 Median :2020-05-12   湖北省武漢市:   2   40代   :1381   調査中:   1           
 Mean   :2020-05-26   調査中      :  85   50代   :1146   不明  :   7           
 3rd Qu.:2020-07-11   都外        : 425   60代   : 725                         
 Max.   :2020-07-22   都内        :8965   70代   : 632                         
                      ―          : 337   (Other):1016     

居住地が空白になっているものとダッシュになっているものがありますが、不明にまとめてしまってしていいか分からないのでそのままにしています。

テレビなどでよく見る新規陽性者数の推移をプロットするのには以下のように、公表日ごとの人数を集計します。

# 新規陽性者数のグラフ
num.positive <- table(dat$公表日)
plot(num.positive, xlab="公表日", ylab="新規陽性者数")
grid()

ついでにN日間移動平均線を追加しましょう。以下ではN=7としています。

# N日間移動平均
npos <- as.data.frame(num.positive)
colnames(npos) <- c("公表日", "新規陽性者数")
N <- 7
npos$移動平均 <- filter(npos$新規陽性者数, rep(1,N)/N, sides=1)
lines(npos$公表日, npos$移動平均, col=2, lwd=2)

出てきたグラフは以下のようになりました(今日公開されているのは昨日までのデータなので366人の新規については入っていません)。CSVファイルで情報提供されていると、いろいろな人が試してみることができるのでいいですね。

f:id:amarui:20200723172059p:plain

Chromeのアプリ用URL

昔からabout:のようなちょっと秘密のURLというのはありました。

gigazine.net

このところChromeの使用頻度が上がったので、Chromeの隠し機能をオンオフできるchrome://flagsなどを知りました。そして、そのちょっと秘密のURLの一覧表にアクセスできるというURL(chrome://chrome-urls)があるというのも知りました。

news.mynavi.jp

面白いのもあるけど、chrome://newtabとか何に使うんだろう……?(ウェブページからは実行できず、アドレスバーに入力する必要があるみたいなので、手動でタブを開いてそこに記入するとそのタブが新しくできたものとされる、という何を言っているのか分からない状況なのです。)

WWDC 2020で発表されたAirPods Proの3Dオーディオ

今回のWWDC 2020では、MacIntelチップからARMチップへの以降が発表されて盛り上がりました。しかし個人的に最も嬉しかったのはAirPods Proのアップデートでした。以下のビデオの42分25秒付近から始まる3分間です(ボタンを押すと42分25秒から再生されると思います)。

発表されたのは、デバイス間の自動切り替え(automatic switching)と空間オーディオ(spatial audio)の2点です。前者も便利といえば便利ですが、後者の空間オーディオがすごいのです。AirPods Proは左右独立のBluetooth接続イヤホンなはずなのに、iPhoneiPadとの相対的なヘッドトラッキングを行って適切なHRTFを畳み込むことで5.1 ch、7.1 ch、Dolby Atmosにも対応するとのことです。AirPodsを買う気がなかったため、この発表を見るまではAirPods Proの中にジャイロセンサーや加速度センサーが入っているとも気づいていませんでした(さっき見たら仕様表に書いてあった……)。

以下の記事によると、開発者はAirPods ProのモーショントラッキングAPI(Core Motion)が使えるそうで、どんなアプリが出てくるかとても楽しみです。

www.phileweb.com

このアップデートはiOS 14にあわせて行われる予定です。昔から使っているソフトがあるために僕はiPhone XsiOS 12のまま使い続けてきたのですが、この発表を受けて(別件でAirPods Proをじっくり試聴できる機会もあって性能にも驚き)思わずAirPods Proを購入してしまいました。ちゃんと設定して使うためにiPhoneiOS 13にアップデートしてしまい、今ではiOS 14を心待ちにしています。

自作PCを組み立てた

はじめに

一部で話題になっている5万円台PCや7万円台PCを参考にしつつPCを組んでみました。そもそも以下の記事が発端なんですが、その時期にあわせてメインマシンの買い換え時期がそろそろなことと、在宅勤務の時間が長くなったのに自宅でノート機を使っているのはなぁ、数年前のハイエンド・ノートPCよりも最近のエントリー・デスクトップのほうが性能は高いだろう、などの考えが交錯して「自作作業用に安価なデスクトップを作れば良い」という考えになりました。ここ20年くらいはデスクトップ機を持っていなかったので*1、最近はどんなかんじになっているのかという好奇心もありました。デスクトップ機でもノート機でも部品の追加や交換は平気でやっていたんですが、自作は初めてです*2

www.itmedia.co.jp

この記事を参考にして、Micro ATX規格のマザーボードRyzen 5 1600AFを中心にしてAMDのCPUとGPUで組んでいく予定だったんですが、1600AFが入手困難な状況が続いていたことと、Intel Core i5 10400も頑張っているよという意見も聞いたので、まずはGPU内蔵の10400にすることにしました。第10世代からはi5でもスレッド数はコア数の2倍になってますし、GPUが足りなくなったら追加すればいいですし。

部品構成

Windows 10 Homeのライセンスも新規購入しないといけないので、目標としては本体のみで5万円台に抑えたい(ディスプレイ、キーボード、マウスなどの周辺機器は探せば出てくるはず)。GPU内蔵とはいえCPUが高く付いたので、他はケチケチと。メインマシンにするMacを購入するときは「一番いいのを頼む」精神で、とにかくCTOリストから最上位のものを選んでいくことが多いのですが*3、予算制約の中で部品を選ぶのも楽しいですね。部品選びにはこのサイトが便利でした。

niku.webcrow.jp

*1:最後に使っていたデスクトップ機は1999年頃のPentium III (600MHz)で、ゲーム用(MS Flight Simしかやってなかった)のサブマシンにしていました。当時のメインマシンはPowerBook 5300cs/100を使っていたんだったかな。

*2:大学のときに(回路シミュレータ上ではありますが)AND/ORゲートを作ってそれを組み合わせてCPUを作っていくという演習授業も受けましたし、OSや言語処理系を作る授業もたいそう楽しく受講したので、そういう意味での自作は初めてではないです。Epson PC-386Mのクロック水晶の交換とかもやってますしね。でも、プラ板だけからとか、丸太一本削り出しでとか、あるいは鋳造では作ったことはあるけど、キットのプラモデルでガンダムを作るのは初めて、という感じでしょうか?

*3:数年前まではそれでも40万円くらいだったんですが、今のMacBook Pro 16 inchはSSDの値段がゴツいこともあって最上位構成は70万円と手が届かない値段になりますね-白目

続きを読む

本日の給油(スーパーカブ110プロ/JA07) & 千葉県一周の旅

給油日 オドメーター (km) 給油量 (L) 単価 (円/L) 燃費 (km/L) 距離単価 (円/km)
2020-02-22 10890.0 2.67 141.95 51.20 2.77
2020-03-16 11037.1 3.46 138.73 42.51 3.26
2020-03-20 11217.6 2.83 133.92 63.78 2.10
2020-03-21 11407.0 3.11 142.12 60.90 2.33
2020-03-22 11612.2 3.50 138.57 58.63 2.36

3月の三連休に、千葉県一周ツーリングに行ってきました。松戸あたりから出発し、できるだけ海沿いを走って岬や灯台を巡る旅です。富津岬(A)〜館山城〜洲崎灯台(B)〜野島埼灯台(C)〜太東灯台(D)〜犬吠埼灯台(E)〜香取神宮(G)〜東峰神社(H)〜関宿城(I)。千葉県の最北端(富津岬)・最南端(野島埼灯台)・最東端(犬吠埼灯台)・最北端(関宿城)を制覇しました。(厳密には少しずれたところが端になっているそうです)

1日200 kmくらいで3日間で600 km。燃費が良いので交通費は1300円のみ。オドメーターのゾロ目には蘇我駅あたりで遭遇。

本日の給油

給油日 オドメーター (km) 給油量 (L) 単価 (円/L) 燃費 (km/L) 距離単価 (円/km)
2017-09-15 10004.7 3.09 123.96 53.03 2.34
2017-10-04 10152.2 2.08 125.96 70.91 1.78
2017-10-18 10314.9 3.42 125.73 47.57 2.64
2018-05-05 10499.5 3.18 137.74 58.05 2.37
2019-06-08 10607.9 2.40 148.75 45.17 3.29
2019-07-13 10753.3 3.20 137.81 45.44 3.03
2020-02-22 10890.0 2.67 141.95 51.20 2.77
2020-03-16 11037.1 3.46 138.73 42.51 3.26

オドメーターの次のゾロ目タイミングが近づいてきた。11111、12345のあとはとうぶん無いかなー。

JuliaからRCallを使ってANOVA君を呼び出す

ANOVA君は、井関龍太氏が開発している、Rで動作する分散分析プログラムです。様々な実験計画に対応できるようになっており、分散分析に加えて多重比較や単純主効果の検定もやってくれます。自分ではlm()とかaov()なども使ってはいますが、ANOVA君は一回の関数呼び出しですべてを面倒見てくれるのでとても重宝します。

riseki.php.xdomain.jp

数年前に僕がPythonに移行できなかった理由の一つに「まともな分散分析ツールがない」ということがありました。1要因や簡単な2要因のものくらいなら見つかるのですが、3要因以上だったり2要因でも混合計画のものは見つからず、かといって自分で作るのも車輪の再発明をしているかんじでイヤだったのです。Juliaに移行するにあたっても同じ理由でRを捨てられずにいます。

しかし、JuliaはPythonともRとも親和性が高く、それらで書かれたプログラムも簡単に呼び出すことができます。今日は、JuliaでRを呼び出してANOVA君を使う例を紹介します。

続きを読む