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

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

前回の記事では、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. 記事を終わりにしながら

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

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

관련 글

学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編
学校業務の自動化 - AIを利用した生活記録簿チェック 教科別・特別記述編
学校で最も意味がなく、きつくて退屈な業務を一つ挙げろと言われたら、自分は生活記録簿(生徒指導要録)チェックを選ぶだろう。中学校では生活記録簿がそれほど重要ではないが、高等学校では入試と関係しているため非常に重要である。問題は、このような生活記録簿の点検で探すものが、せいぜい単純な誤字脱字、記載禁止用...
ゼロから作りながら学ぶ LLM 第7章 読書レビューとチャレンジの感想
ゼロから作りながら学ぶ LLM 第7章 読書レビューとチャレンジの感想
第7章の内容は、指示に従うように微調整するプロセスだ。ある質問に対して、期待する応答を返すようにすること。やはり必要なのはデータである。1. 指示微調整の手順ここでの要点は、質問と応答のデータセットを用意し、入力-出力のペアとして学習させること。これをプロンプトスタイルと呼ぶ。その他は以前のプロセス...
ゼロから作りながら学ぶ LLM 第6章 読書レビュー
ゼロから作りながら学ぶ LLM 第6章 読書レビュー
第6章は、分類のためのファインチューニングについてである。例として出てくるのは、スパム分類器の作成。スパム分類器は、あるメールなどがスパムかスパムでないかを分類するものなので、出力結果は 0 や 1 のような値になる必要がある。1. ファインチューニングの手順ファインチューニングのプロセスは、モデル...
ゼロから作りながら学ぶ LLM 第5章 読書レビュー
ゼロから作りながら学ぶ LLM 第5章 読書レビュー
今日は12月14日だ。実はチャレンジ期間はすでに2週間も過ぎてしまったが、だからといってレビューを書くのをあきらめることはできなかった。こうして残しておくTILが、あとで自分の血となり肉となるからだ。コードそのものよりも、その意味に集中して書いてみようと思う。1. モデルの損失計算GPTモデルを作っ...
ゼロから作りながら学ぶ LLM 第4章 読書レビュー
ゼロから作りながら学ぶ LLM 第4章 読書レビュー
今日は11月26日なので、毎日1章ずつ読み切ればチャレンジ成功だ。長男と次男の妨害の中で、それが可能かどうかは分からない。1. ダミー・トランスフォーマーGPTモデルを作りながら、PyTorchからトランスフォーマーのダミーブロックを持ってくる箇所を見た。調べてみると、PyTorch の nn の中...
ゼロから作りながら学ぶLLM第3章読書感想
ゼロから作りながら学ぶLLM第3章読書感想
MacBookに大量の水をこぼしてパニックになり、3〜4日無駄にした。今考えてみると、どうせMacBookは駄目になったし、修理に出すと思って何かをすればよかったと思う。とにかく少し遅れたけど、最後までやるべきだと思い、第3章の感想を残す。1. アテンションメカニズム3章...

댓글을 불러오는 중...