LoginSignup
1
0

More than 1 year has passed since last update.

SQL を使って新型コロナのオープンデータを処理 その2

Last updated at Posted at 2021-08-15

(夏休み企画 9/20)

先に

「SQL を使って新型コロナのオープンデータを処理」
https://qiita.com/nanbuwks/items/3f7a9ab616803c8211e1
において、足立区のオープンデータを使った10歳未満の感染状況の集計をした記事を書きました。

更に発展させて、こういうの作ってみましょう。

image.png

(「新型コロナウイルス感染症の国内発生動向(速報値)(令和3年8月11日18時時点)」
https://www.mhlw.go.jp/content/10906000/000818427.pdf
4ページより抜粋)

このためには、以下のようなデータを作ることが必要です。

image.png

こういったものを SQL で作るにはどうしたらいいでしょうか?

環境

  • Ubuntu 20.04 LTS Desktop
  • MariaDB 10.3.31-MariaDB-0ubuntu0.20.04.1
  • phpMyAdmin 4.9.5deb2
  • 足立区感染状況のオープンデータ (2021/8/14朝取得)
  • LibreOffice 6.4.7.2 Calc

SUM 構文を使って集計する

先の記事中で、簡単な集計として全体から10歳未満を数えるSQLが以下のようにありました


SELECT COUNT("") from コロナ WHERE 年代="10歳未満"

これはSUM構文を使って以下のように書くことができます。


SELECT SUM(年代="10歳未満") from コロナ

とすると、440が出ます。

image.png

ちょっと見栄えを良くしましょう。
```

SELECT SUM(年代="10歳未満") AS 10歳未満 from コロナ
```

image.png

見出しが見やすくなりました。

また、先に


SELECT DATE_FORMAT(診断日, "%Y年%m月") as 診断月,COUNT("") AS 人数 FROM `コロナ` WHERE 年代="10歳未満" GROUP BY 診断月 ORDER BY 診断月

として月ごとの集計を出しました。これを書き直して


SELECT DATE_FORMAT(診断日, "%Y年%m月") as 診断月,SUM(年代="10歳未満") as 10歳未満 from コロナ GROUP BY 診断月 ORDER BY 診断月

とすることもできます。

image.png

SQL を見やすく書こう

さて、SQLは見やすく以下のようにもできます。


SELECT 
  DATE_FORMAT(診断日, "%Y年%m月") as 診断月,
  SUM(年代="10歳未満") as 10歳未満
from コロナ
GROUP BY 診断月
ORDER BY 診断月

年齢別に横にデータを並べてクロス集計

更に、以下のようにしてみましょう。


SELECT 
  DATE_FORMAT(診断日, "%Y年%m月") as 診断月,
  SUM(年代="0歳") as 0歳,
  SUM(年代="10歳未満") as 10歳未満,
  SUM(年代="10代") as 10代,
  SUM(年代="20代") as 20代,
  SUM(年代="30代") as 30代,
  SUM(年代="40代") as 40代,
  SUM(年代="50代") as 50代,
  SUM(年代="60代") as 60代,
  SUM(年代="70代") as 70代,
  SUM(年代="80代") as 80代,
  SUM(年代="90代") as 90代,
  SUM(年代="100代") as 100代
from コロナ
GROUP BY 診断月
ORDER BY 診断月

image.png

積み上げグラフの作成

先のデータを、「クリップボードにコピー」してLibreOffice Calcに持っていきます。

LibreOffice Calc上で積み上げバーグラフを作ると、以下ができました。
image.png

これを見ると、足立区でも10歳未満が増えてきています。
また、20代以下を合計するとほぼ50%ぐらい。感染のリスクは若年層が大きいことがわかります。

やってみよう

image.png

  • こっちのグラフを作るにはどうしたらいいかな?
  • 無症状の人はどれだけいるか集計できるかな?
  • 年齢別の死亡率を出すにはどうしたらいいかな?
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0