5
7

More than 3 years have passed since last update.

【Python】コロナウイルスのデータを利用したグラフ作成入門【初心者向け】

Last updated at Posted at 2020-03-13

はじめに

WHOの公開データを元にしたCSVファイルを読み込み、グラフ化するまでの一連の流れを説明します。

参考にしたサイトはこちらです。

上記サイトでは、Pythonやmatplotlibの基礎知識がある前提で説明されています。

この記事では、僕自身が理解出来なかった点をまとめることで、
初心者の方でも理解できるように補足説明を書いています。

前提

  • Python、JupyterNotebookなどの、環境セットアップができていること
  • 読み込むCSVファイルは、参考サイトのgithubリンクにて公開されており、今回はそれを利用しています。
  • これから機械学習を学ぼうとされている方向けの内容です。(すでに機械学習を理解されている方にとって、少し物足りないかと思われます。)

環境

  • macOS High Sierra 10.13.6
  • Python 3.7.6
  • matplotlib 3.1.3

ゴール

以下が達成できることを目標としています。

  • CSVを読み込む
  • matplotlibでグラフを描画できる

準備

データの読み込み

まずは、CSVを読み込みます。

import pandas as pd

# データ取り込み
df = pd.read_csv("COVID-19.csv", index_col='Date', parse_dates=['Date'])

pandasと呼ばれるライブラリをimportし、CSVファイルを読み込んでいます。
pandasとは、CSVの読み込みなど、使いやすいデータ構造とデータ分析ツールを提供するライブラリです。

日本語の基本的な内容は、こちらを見て頂くと、どんなことができるのか理解できます。

補足

pandas.read_csv()の引数は、以下のとおりです。

  • 第1引数: 読み込み対象のCSVファイル
  • 第2引数: index_col … index列を指定
  • 第3引数: parse_dates … Date列をDateTime型に変換

他にも多数のパラメータが用意されているため、最初は戸惑いますが、一つずつ理解していけば問題ないかと思います。

データ表示

matplotlibのインポート

import matplotlib.dates as mdates

matplotlibと呼ばれるライブラリを参照します。
matplotlibは、数行で静的、アニメーション、およびインタラクティブな視覚化を作成できるライブラリです。

その中でも今回は、横軸を日付とした時系列データを取り扱うため、matplotlib.datesを使用します。

import文にasをつけることで、別名をつけることができます。
毎回、matplotlib.datesと書かず、mdatesと書くだけで呼び出し可能です。

色パターンの取得

# 色パターンを取得
cmap = plt.get_cmap("tab10")

今回は、1つのグラフに複数データを表示させるため、各線に色分けが必要です。
1つずつ色を考えると大変なため、適当な色パターンとなるライブラリです。

表示する線の本数によって、読み込むcmapを切り替えるイメージです。

matplotlibで色をたくさん使う

目盛りの定義

#  設定する目盛りを定義する
locator = mdates.AutoDateLocator()
formatter = mdates.ConciseDateFormatter(locator)

グラフを作成する際、目盛りの単位など、決定事項が様々です。
上記処理を簡潔に説明すると、以下のとおりです。

  • AutoDateLocator()では、軸目盛りを良い感じに割り振ります。
  • ConciseDateFormatter(locator)にて、locatorへ簡潔な時系列のラベルを反映します。

定義した目盛り情報をグラフへ反映する

ax = plt.gca()

plt.gca()にて、現在のAxesオブジェクトを取得し、axのオブジェクトに設定しています。

補足 Axesオブジェクトとは?

Axesオブジェクト、Figureオブジェクトに疑問を持たれる方は、多いかと思われます。

イメージは以下のとおりです。
fig_map.png

引用元:公式ドキュメント

オブジェクト 説明 親子関係
Figureオブジェクト 図の大枠 一番親
Axesオブジェクト データ空間を持つ画像領域 Figureの子クラス
Axisオブジェクト 目盛り(軸上のマーク)と目盛りラベル(目盛りにラベルを付ける文字列) Axesの子クラス

上記を詳細に理解されたい方は、以下の記事が参考になるかと思います。

早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話

グラフの描画

# 定義した軸目盛りをグラフへ反映
ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)

# 描画
ax.plot(df.index, df['Global Confirmed'], "s-", color=cmap(3))
ax.plot(df.index, df['China Confirmed'], "o-", color=cmap(2))
ax.plot(df.index, df['Global Deaths'], "s-", color=cmap(7))
ax.plot(df.index, df['China Deaths'], "o-", color=cmap(6))

# グリッド補助線の描画
ax.grid()

# y軸をログスケール表示
plt.yscale('log')

# 凡例を表示
plt.legend(['Global Confirmed', 'China Confirmed','Global Deaths', 'China Deaths'])

# ファイル保存
plt.savefig('COVID-19.svg', bbox_inches="tight") # svgをpngにすると画像で保存可

表示結果は、以下のとおりです。
COVID-19.png

表示されるグラフについて、横軸は日付、縦軸は人数となっています。

最後に

  • 「もう少しAI/機械学習を学びたい。」
  • 「独学で学びたいが、何から学べばよいか分からない。」

このような方は、こちらを読めば、効率よく機械学習を学ぶためのステップアップ手順を理解できます。

また、具体的なPythonの学び方については、こちらが参考になります。

参考情報

COVID-19
早く知っておきたかったmatplotlibの基礎知識、あるいは見た目の調整が捗るArtistの話

5
7
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
5
7