Python問題集を解いてみよう!!

【Python】新型コロナの陽性者数をグラフにしてみた【Matplotlib】

URLをコピーする
URLをコピーしました!

以前、Python でデータを可視化する、グラフを描くライブラリである Matplotlib の基本的な使い方をご紹介しました。

今回は Matplotlib を使用して、日本における新型コロナの陽性者数の推移をグラフにしてみたいと思います。

ワクチンを接種した人の割合がかなり増えたためか、陽性者数もかなり減ってきましたが、どれぐらい減ったのかを実際にグラフにして確認してみましょう。

おすすめのレンタルサーバー
目次

Google Colaboratory

本記事に掲載しているコードは Google Colaboratory で動作を確認しています。

下記リンクからアクセスして、ご自身の Google ドライブにコピーしていただければ、すぐに実行できます。

環境構築が必要ない Google が提供している Web サービスなので、Python を学習中の方、これから学習を始める方にはオススメです。

外部ライブラリのインストール

今回は Matplotlib と Pandas というデータ分析用のライブラリを使用するので、事前に pip 等でインストールをしてください。

pip install matplotlib

pip install pandas

Googel Colaboratory ではデフォルトでどちらもインストールされています。

ちなみに、私が動作を確認した時点でのバージョンは、Matplotlib は 3.2.2、Pandas は1.1.5でした。

新型コロナ陽性者数のデータ

新型コロナの陽性者数のデータは厚生労働省が公開しているCSV形式のデータを使用します。

データは厚生労働省のホームページの下記ページでオープンデータとして公開されています。

厚生労働省のオープンデータ

厚生労働省 オープンデータ

CSVデータの形式を確認

本記事を書いている時点で公開されているCSVデータは次のような形式になっています。

新型コロナの陽性者数のデータ形式

Date列が日付、Prefecture列が県名、Newly confirmed cases列が陽性者数になっています。

県名がALLになっているデータが全国のデータになります。

非常にシンプルな形式ですね。

Matplotlib でグラフを描く

基本編の記事では書いていないことについて、後で簡単に解説しますが、まずはコード全体を載せていきます。

全国の陽性者数

まずは全国の陽性者数をグラフにしてみます。

上記コードを実行すると次のグラフが出力されます。

全国の陽性者数の推移

陽性者数がかなり減っていることが分かりますね。

県別の陽性者数

続いて、県別の陽性者数をグラフにしてみたいと思います。

本記事では神奈川県のデータをグラフにします。

上記コードを実行すると次のグラフが出力されます。

神奈川県の陽性者数の推移

全国のグラフと見比べると、2021年5〜6月の山が比較的小さくなっていることが分かりますね。

東京都と神奈川県の陽性者数を比べる

続いて、東京都と神奈川県の陽性者数を比較できるようなグラフを描いてみたいと思います。

何グラフで比較するのが良いかは分かりませんが、今回は基本編で使用した線グラフを使用してみます。

上記コードを実行すると次のグラフが出力されます。

東京都と神奈川県の陽性者数

パッと見で、東京都の陽性者数は神奈川県の2倍ぐらいですね。

2021年8月以降の全国の陽性者数

最後に期間を2021年8月以降に絞ってグラフにしてみます。

上記コードを実行すると次のグラフが出力されます。

2021年8月以降の全国の陽性者数

期間を絞ってデータ数を減らすと、1つ1つの棒がはっきり見えますね。

解説

ここでは、Matplotlib の基本編の記事で紹介していないことについて、簡単に解説していきます。

基本編はこちら。

主に Pandas に関する解説になると思います。

インターネット上で公開されているCSVデータの読み込み

インターネット上で公開されているCSVデータの読み込みには Pandas のread_csv()関数を使用しました。

URLを指定するだけで読み込んでくれるのでオススメです。

読み込んだデータは Pandas のDataFrameという形式になります。

Python において、まとまったデータを扱う時にはDataFrame形式がよく使われます。

データの加工も簡単に行えるので、非常に便利です。

# URLを変数に格納
data_url = 'https://covid19.mhlw.go.jp/public/opendata/'
data_file_name = 'newly_confirmed_cases_daily.csv'

# CSVファイルをDataFrame形式で変数に格納
data_df = pd.read_csv(
    f'{data_url}{data_file_name}', 
    parse_dates=[0]
)

read_csv()関数の最初の引数にはCSVファイルのURLを指定しています。

次のparse_dates=[0]は最初(1番左)の列をdatetime型に変換して読み込む設定です。

parse_dates=[0]を指定しなかった場合、指定した場合のデータを見てみましょう。

parse_dates の指定有無を比較

パッと見でもスラッシュがハイフンに変わっています。

parse_dates=[0]を指定しなかった場合、Date列はただの文字列になっています。

Date列を文字列のままグラフにすることもできますが、日付が非常に見辛くなるので、parse_dates=[0]で型を変換するようにしましょう。

データの加工

次も Pandas についてです。

DataFrame型のデータの加工について見ていきます。

今回行ったデータの加工は3パターンあります。

順番に見ていきます。

条件に合った行を抽出する

1つ目は、条件を指定して、条件に合った行のみを抽出するパターンです。

全国のデータ、東京都のデータ、神奈川県のデータを抽出している時に使用しています。

# 全国のデータを抽出
data_all_df = data_df[data_df["Prefecture"] == "ALL"]

上記は全国のデータのみを抽出しています。

data_dfPrefecture列がALLの行を抽出したい時はこのように書きます。

特定の列を抽出する

2つ目は、特定の列を抽出するパターンです。

グラフのX軸、Y軸のデータを指定する時に使用しています。

# 日付と陽性者数の値を変数に格納
data_all_date = data_all_df["Date"]
data_all_pcr_positive_daily = data_all_df["Newly confirmed cases"]

これは単純に列名を指定します。

特定の1列を抽出しているので、1次元のデータになり、DataFrame型ではなく、Series型になります。

Series型を複数結合させると DataFrame型になるようなイメージです。

期間を指定して抽出する

3つ目は、1つ目の条件に合った行を抽出するに含めても良いかもしれませんが、期間を指定して行を抽出するパターンです。

2021年8月以降のデータを抽出する時に使用しています。

# 2021年8月1日以降のデータを抽出
data_df_ALL_after_2021aug = data_df_ALL[data_df_ALL["Date"] >= datetime(2021, 8, 1)]

ここで押さえておきたいポイントは次の2点です。

  • CSVデータを読み込む時にparse_dates=[0]を指定して、Date列をdatetime型に変換していること
  • 日付の指定にdatetimeクラスのdatetime()メソッドを使用している

期間を絞る時ためにも必要になるので、CSVデータを読み込む時は日付のデータを変換しておきましょう。

棒グラフ

最後は Matplotlib の棒グラフについてです。

基本編では線グラフを使用しましたが、今回は棒グラフも使用しました。

コードを見ていただくだけで分かった方も多いと思いますが、線グラフと棒グラフとで今回変更した箇所は1箇所のみです。

# 棒グラフ
ax1.bar(
    data_all_date, 
    data_all_pcr_positive_daily,
    color='white',
)

# 線グラフ
ax3.plot(
    data_tokyo_date, 
    data_tokyo_pcr_positive_daily,
    color='red',
    label='Tokyo'
)

棒グラフはbar、線グラフはplotです。

今回は、線グラフでは2系統のデータを使用したのでlabelオプションを指定していますが、他は同じです。

おわりに

今回は、

Python でデータを可視化、グラフを描くためのライブラリである Matplotlib を使用して、新型コロナの陽性者数をグラフにする方法

をご紹介しました。

グラフにしてデータを可視化すると、そのデータの特性だったり、他のデータとの違いが分かりやすくなるので、データを分析する時は Matplotlib を使用して、データをグラフにしてみてはいかがでしょうか。

新型コロナの陽性者数もかなり減ってきているので、このまま収束してくれると良いですね。

以上です。

スポンサーリンク

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!

コメント

コメントする

目次
閉じる