【gnuplot / FFmpeg】日本の新型コロナウイルス(COVID-19)感染に関する過去1年間のデータをアニメーション化

スポンサーリンク
FFmpeg
この記事の内容
  • 日本の新型コロナウイルス (COVID-19) の感染状況の変化を過去1年分のデータから見る
  • データの推移を折れ線 / 棒グラフでアニメーション化
  • gnuplot + FFmpeg によるアニメーション作成方法を紹介

どうも,Hiro(@hiroloquy)です.
最近,日本国内での新型コロナウイルス (COVID-19) の感染状況が悪化し,緊急事態宣言の再発令医療壊滅の懸念など,かなり緊張感が高まっていますね

記事 新型コロナウイルス感染症緊急事態宣言(内閣官房新型コロナウイルス感染症対策推進室)
▶︎ https://corona.go.jp/emergency/

動画 「このままでは医療壊滅に」日本医師会が危機感(FNNプライムオンライン)

昨年に日本でもコロナが広がり,外出自粛やイベントの中止などによって一時期収まったと思えば,1年後には医療壊滅が近づいている.恐ろしいですね…

この現状・ニュースを知ったとき,日本国内のコロナの感染状況が現在どうなっているのか,昨年の流行初期からどう変化しているのか気になったので,陽性者数と死亡者数の2つのデータに着目し,過去1年間の推移をグラフ化・アニメーションにしてみました.

詳細は以下の順番で説明していきます.
1.データ収集2. gnuplotでグラフ作成 & PNG出力3. FFmpegでアニメーション化

スポンサーリンク

データ収集

今回,厚生労働省が公開しているオープンデータを元にグラフを作成しました.
下記リンクから,陽性者数PCR検査実施人数死亡者数入院治療等を要する者の数などのcsvファイルをダウンロードできます.

出典 オープンデータ(厚生労働省)https://www.mhlw.go.jp/stf/covid-19/open-data.html

今回は陽性者数と死亡者数の2つのデータを使います.

gnuplotでグラフ作成 & PNG出力

次に,gnuplotでグラフを作成し,PNG画像に出力します.
今回は陽性者数 (pcr_positive_daily.csv) を青色の棒グラフ死亡者数 (death_total.csv) を赤色の折れ線グラフにして同時にプロットします.

しかも,データの推移をアニメーションにするので,今回は日付ごとにプロットさせます.
なのでCSVファイルに記録された日数分だけPNG画像が出力されます.
今回は2020年1月16日〜2021年1月15日の1年間分なので,画像枚数は366枚です.
(プログラム13,14行目でPNG画像を保存するフォルダを自動作成するのでご安心を)

ディレクトリ構造はこのようになります.

フォルダ
├  COVID-19_japan.plt
├  pcr_positive_daily.csv
├  death_total.csv
└ image/
├ img_0001.png
├ img_0002.png

得られた大量のPNG画像はあとで紹介するFFmpegによって動画に変換します

注意 pcr_positive_daily.csvは2020年1月16日から,death_total.csvは2020年2月14日からデータが始まるため,データの開始日日数は異なります.他の集計データでも集計開始日が異なるので,注意してください.

実行環境
  • macOS Big Sur 11.1
  • gnuplot version 5.4 patchlevel 1

FFmpegでアニメーション化

最後に,得られた連番PNG画像をFFmpegによってアニメーションにします.
FFmpegを使ったことがない,インストールをしていない場合はこちらを参考にしてください.

記事 HomebrewでMacにFFmpegをインストールする方法と使い方(新卒エンジニアの開発日記)
▶︎ https://fukatsu.tech/install-ffmpeg

今回は以下のコマンドを実行してアニメーションを作りました.

ffmpeg -framerate 18 -i img_%04d.png -vcodec libx264 -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -r 60 movie.mp4

詳細な部分については忘れたので各自調べてください.ただ,2つの数字についてだけ説明します.

  • “18”は1秒間のフレーム数,つまり動画1秒の間にgnuplotで作ったPNG画像を何枚表示するかを決定します.今回,2020年1月16日〜2021年1月15日の1年間(=366日)の感染データを20秒動画にするので,366枚 ÷ 20 秒 = 18.3枚/秒 ≒18枚/秒 と計算できます.
  • “60”は出力される動画 (movie.mp4) のフレームレート (fps) です.60 fps にしたので高品質ですがファイルサイズは大きくなります.

gnuplotが大量のPNG画像を詰めたフォルダ (imageフォルダ,コード13行目参照) で実行すれば,movie.mp4が出力されます.これで終わりです!

スポンサーリンク

日本の新型コロナウイルスの陽性者 / 死亡者の推移 (2020.1 – 2021.1)

上記1〜3の手順で出力したアニメーション動画はこちら.
(YouTubeに動画をまとめてるのでチャンネル登録よろしくお願いします)

陽性者数の変動がまさに波ですね.
これまでの第1波,第2波以上に現在の第3波が危険な状況であることがわかります.
2020年10月からの陽性者数の増え方がすごく,緊急事態宣言が再発令されるのも,医療壊滅の警告が出るのも納得です.

また,2021年1月15日時点で新型コロナウイルスによる死亡者数が合計4379人であることにもかなり驚きました.

ネット記事やSNSで新型コロナウイルスの感染者数や政府の対応,世界での感染状況などを目にすることが多いですが,自分の手で調べて数値や傾向を見ると,改めて現在の状況の怖さを感じました.

まとめ

今回は厚生労働省が公開してる過去1年間のデータを元に,日本国内の新型コロナウイルスの陽性者 / 死亡者の推移をgnuplot + FFmpegでアニメーションにしました.

使用した厚生労働省のオープンデータは全国の都道府県の合計値でしたが,NHKは都道府県別のデータを公開しているみたいなので,次回は円を使って都道府県ごとの感染規模を表した図をgnuplotで作ってみたいと思います.(時間があれば)

参考 新型コロナウイルス データで見る感染状況一覧(NHK特設サイト)
▶︎ https://www3.nhk.or.jp/news/special/coronavirus/data-widget/

また,今後も時事的な内容について取り上げ,どこかの機関・団体が公開しているデータがあれば,それもgnuplotでグラフ or アニメーションにしてみようと思います.
(以前,JAXAの公開データを元に,はやぶさ2の軌道データをgnuplotでアニメーションにしたので,よければ観てください.詳細については後日まとめます.)

地球帰還直前 (TCM-3) までのはやぶさ2の軌道のアニメーション [gnuplot] (Hiro.S)

コメント

タイトルとURLをコピーしました