pythonを使って日別のデータを纏めてプロットする

京阪神エリアのコロナウイルスの流行状況が示された情報がすぐに見つからなかったことに端を発するこの企画も、第5段です。

これまで、

1. 関西のコロナウイルス感染者の状況
2. shellを使ってデータをウェブから取得する方法
3. 1.の操作をシェルスクリプトにして、瞬時に終わらせる方法
4. ダウンロードしてきたcsvファイルを、pythonを使って結合する方法

について、レシピを載せて来ました。
ここまでエクセルで図をつくって来ましたが、回を経るごとに効率化され、
だんだんとマウスを使う回数も減ってきました。

今回は、pythonでグラフを書かせるところまでやりたいと思います。
前回同様、Jupyter Notebook 上でスクリプトを書いています。

____________________________________

import pandas as pd


osaka = pd.read_csv('COVID-19-osaka0413.csv',encoding='cp932',names=['id', 'date', 'place_diag','place_living'])

osaka["date"] = pd.to_datetime(osaka["date"])


osaka.groupby("date").size().plot(grid=True)


____________________________________


この四行で、下に示したようなfigができます。(大阪の日別新規感染者数です。)





もう少しこまかく説明

1. データ読み込み
import pandas as pd

osaka = pd.read_csv('COVID-19-osaka0413.csv',encoding='cp932',names=['id', 'date', 'place_diag','place_living'])

前回と同様です。
pandasを使って、COVID-19-osaka0413.csv という名前のcsvファイルを読み込んでいます。
「osaka」という名前をつけたので、これ以降、osaka と書くと、このデータを指定します。
文字コードの修正を施し、四列の名前をそれぞれ、'id', 'date', 'place_diag','place_living' としています。

1'. 読み込んだデータ型の確認

osaka.dtypes

と打ち込むと、以下のような出力が返ってくるはずです。
これは、それぞれのデータ列のデータ型がなにか、ということを表示しています。



今回は、時系列データをグラフにしたいので、date列を横軸に使います。
ですが、date 列のデータの型が、object 型と認識されています。

いきなりですが、「りんご、みかん、ぶどう」を順番に並べてください、と言われても、
どの順で並べればよいか困りますよね?あいうえお順?好きな順?object型はそういうデータということです。

日付の順にデータを並べたいので、date の列は、日付データだよ!と認識させます。

2. date 列のデータをdatetime型に変換する

osaka["date"] = pd.to_datetime(osaka["date"])

等号の右側の、pd.to_datetime() というfunctionで、カッコの中身のデータフォーマットを、datetime にします。

もう一度、osaka.dtypes をしてみましょう。
date のところが、datetime になっています。


3. 同じ日付のデータを取りまとめる
今回利用しているデータは、新規感染者が出るたびに、その感染者数についての情報が、csvに足していかれる形のデータです。
つまり、日別の集計が行われていません。
日別のデータを取りまとめるため、以下のコマンドを使ってみましょう。

osaka.groupby("date").size()

.groupby() で、カッコ内のデータの同じものをグループ化することができます。
.size() で、さらにグループ化したデータのサイズ、この場合は個数を数え上げています。
このコマンドを使うと、以下のような表が出力されるはずです。




表はまだまだ続いていますが、途中で切りました。
このように、感染者が出た日付と、その横にその日付のデータがいくつあるか、表示されているはずです。
____________
[4/15日追記]
この行は、groupby よりもシンプルなコマンドである value_counts を用いて、

osaka["date"].value_counts()

と書いてもオッケーです。後日の記事はこちらの方式で書いています。

DataFrame.groupby("A") は、DataFrame の中の列"A"についてまとめ、新しいDataFrameを合成します。
このとき、"B"や"C"列についても、"A"に従って足し合わされています。
続いて、 .size() を作用させて、新しい DataFrame に入っている要素の数をとり出しています。

一方、DataFrame("A").value_count() では、DataFrame の、"A" 列の、要素の個数を数え上げさせます。
____________

あと一息、得られたデータをグラフ化しましょう。

osaka.groupby("date").size().plot(grid=True)

前半まではおんなじ処理をしています。最後、「.plot( )」で、プロットを作れ!と指示しています。カッコの中にある、「grid=True」によって、プロットに補助線を入れています。
なくても大丈夫です。

やっと、グラフを作成するところまでたどり着きました。
次は、大阪の情報だけでなく、他の府県の情報をまとめて表示するための操作について、まとめたいと思います。


コメント

このブログの人気の投稿

VNCで見ている画面と自分のマシンの間でのコピー&ペースト

Natural Bond Orbital (NBO) Analysis, 自然軌道解析をやってみる

Lanl2DZの使い方