Pythonデータ視覚化入門5 - データ視覚化

힘센캥거루
2023년 11월 14일(수정됨)
8
python

前回の記事では、PandasとMatplotlibの扱い方について簡単に見た。

今回はPandasで読み込んだExcelデータをMatplotlibで視覚化してみよう。

Matplotlibはデータフレームをサポートしているため、簡単に読み込んだExcelでx値、y値だけ決定して入力すればいい。

1. PandasでExcel読み込み

では、最初の村から始めよう。前回見たツグミフォルダからpandasを用いて地域別猛暑日数を読み込もう。

Pythonデータ視覚化入門5 - データ視覚化-1

そして前回のMatplotlibで見た日本語フォントを設定するコードをコピー&ペーストする。

import pandas as pd

# モジュールの呼び出しと日本語フォントの設定
import matplotlib.pyplot as plt
import matplotlib

# MacOSでのフォント設定
# matplotlib.rcParams["font.family"] = "AppleGothic"

# Windowsでのフォント設定
matplotlib.rcParams["font.family"] = "Malgun Gothic"

# フォントサイズの設定
matplotlib.rcParams["font.size"] = 13

# マイナス表示問題の解決
plt.rcParams['axes.unicode_minus'] = False

hot = pd.read_excel("./hot_wave.xlsx")
hot.head(3)

定型化されたデータを利用するので、これでデータ視覚化の準備が完了する。

ではこの資料を利用してグラフを描いてみよう。

Pythonデータ視覚化入門5 - データ視覚化-2

2. Matplotlibで視覚化する

データを読み込んだら、とりあえず一度入れてみよう。

以下のようにデータフレーム全体をそのまま入れてみる。

plt.plot(hot)

以下のようなグラフが出てくる。

何かおかしい気がする。

Pythonデータ視覚化入門5 - データ視覚化-3

これはExcelデータにあった年がy値として入ったためである。

x軸とy軸を指定しない限り、plotは与えられた値をy値と解釈して表現する。

Pythonデータ視覚化入門5 - データ視覚化-4

以下のようにx軸を年ごと、y軸を年以外のすべての値として設定してみた。

plt.plot(hot["年ごと"], hot.loc[:, "ソウル(日)":])

今回は何か、望んでいる形のグラフがちらっと見えることがわかる。

Pythonデータ視覚化入門5 - データ視覚化-5

3. 望む形に加工する

では、データを望む形に加工してplotに入れればいい。

前回の記事と同じ順序で進める。

  1. x軸、y軸データの選定

  2. タイトル設定

  3. 凡例設定

  4. 軸の名前設定

  5. 軸の間隔設定(必要なら)

  6. グラフスタイルの変更

コードに関する詳細な説明は前回の記事を参照してほしい。

今回の記事ではできるだけコードの活用例に集中したい。

1) x軸、y軸データの選定

まずソウル、大田、大邱の猛暑日数を比較してみることにした。

上部の出力にデータが見えるので、簡単にilocで抽出してグラフを描いてみた。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
Pythonデータ視覚化入門5 - データ視覚化-6

グラフの出力が以下のようなら成功である。

Pythonデータ視覚化入門5 - データ視覚化-7

2) タイトル設定

タイトルは「地域別猛暑日数」と名付けた。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y)
plt.title("地域別猛暑日数") # <-- 追加!
Pythonデータ視覚化入門5 - データ視覚化-8

3) 凡例設定

グラフの値が何か分かりにくいので凡例を設定しよう。columnsを利用すれば簡単に凡例を表示できる。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns) # <-- 追加!
plt.legend() # <-- 追加!
plt.title("地域別猛暑日数")
Pythonデータ視覚化入門5 - データ視覚化-9

4) 軸の名前設定

軸の名前を決めよう。x軸は年、y軸は猛暑日数である。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
plt.plot(x, y, label=y.columns)
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年") # <-- 追加!
plt.ylabel("猛暑日数") # <-- 追加!
Pythonデータ視覚化入門5 - データ視覚化-10

5) 軸の間隔設定

軸の間隔はこのままでも満足している。

ただ、省略しよう。

6) グラフスタイルの変更

グラフスタイルを白黒でも区別できるくらいにしたかった。一度にスタイルを設定できないため、for文でデータを列ごとに巡回しながらスタイルを設定してあげた。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"] # <-- 追加!
for i in range(len(y.columns)): # <-- 追加!
    plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年")
plt.ylabel("猛暑日数")
Pythonデータ視覚化入門5 - データ視覚化-11

4. 後加工する

では、気に入らないところがあれば少しずつ修正しよう。

グラフを見て何か点線があれば、値を明確に表示できるようにしたい。

「matplotlib グリッド」でグーグル検索してみよう。

Pythonデータ視覚化入門5 - データ視覚化-12

愛しのウィキドックスが一番上にある。

一度入ってみよう。

Pythonデータ視覚化入門5 - データ視覚化-13

その内容を軽くコピーして自分のコードに貼り付ける。

もちろん、望む形に変更してね。

x = hot.iloc[:,0]
y = hot.iloc[:,[1,3,4]]
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
    plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年")
plt.ylabel("猛暑日数")
plt.grid(linestyle="--") # <-- 追加!
Pythonデータ視覚化入門5 - データ視覚化-14

これで満足できるようだ。

しかし年が2008年から...?

長すぎるようだ。

出力する年を縮小してx軸も変更してみよう。

x = hot.iloc[6:,0] # <-- 追加!
y = hot.iloc[6:,[1,3,4]] # <-- 追加!
lines = ["o-", "r^:", "bd--"]
for i in range(len(y.columns)):
    plt.plot(x,y.iloc[:,i], lines[i] ,label=y.columns[i])
plt.grid(linestyle="--")
plt.legend()
plt.title("地域別猛暑日数")
plt.xlabel("年")
plt.ylabel("猛暑日数")
plt.xticks(x) # <-- 追加!

こうして最近10年間のソウル、大田、大邱の猛暑日数グラフが完成した。

Pythonデータ視覚化入門5 - データ視覚化-15

これを試験問題にしたり、望む結論を話したいときに提示すると良さそうだ。

5. 記事を終わりにしながら

今回は猛暑日数データを使って簡単に視覚化してみた。

次回の記事では、与えられたグラフを同じように作る練習問題をやってみよう。

댓글을 불러오는 중...