膨大なデータを、確認の為に一括で全てグラフ化したいニーズがあると思うので作りました。
想定環境
Windows10のPythonで作業しています。
pandasとmatplotlibをインストールしておいてください。
はじめに
能書きは省いてやりたい事はこうです。
Before:左上
After:データ3つ毎に分割したグラフ
ちなみにデータは適当にでっち上げたこんなやつです。
※自身のpandas操作練習の為に、1行目に無意味なデータ、3行目に空白行を設けてます。
要点
- df.iloc[].plot() を使う
- for で吐き出す
先にコード
graph.py
import pandas as pd
import matplotlib.pyplot as plt
#日本語の文字化け対策
plt.rcParams['font.family'] = "MS Gothic"
#pandasでデータを読み込む。不要な先頭行(0行目)を読み飛ばす為に header=1 を指定し、1行目から読み込み。
input_csv = pd.read_csv('./dummydata.csv', encoding='ANSI', header=1)
#Index(0)のデータを削除(CSVの3行目、今回は1行目から読んでいるのでIndex(0)を削除)
input_csv.drop(0, axis=0, inplace=True)
#データの先頭5行を確認表示
print(input_csv.head())
#Beforeのグラフ
input_csv.plot(subplots=True, figsize=(5, 5), title='Graph Title', xlabel='aaa')
#Afterのグラフ
for i in range(2, len(input_csv.columns), 3):
input_csv.iloc[:,i:i+3].plot(subplots=True, figsize=(5, 5), title='Graph {}-{}'.format(str(i-1), str(i+1)), xlabel='aaa')
解説1
graph.py
print(input_csv.head())
データの先頭5行を確認表示。
この時点で下記のようにprintされます。
解説2
graph.py
for i in range(2, len(input_csv.columns), 3):
input_csv.iloc[:,i:i+3].plot(subplots=True, figsize=(5, 5), title='Graph {}-{}'.format(str(i-1), str(i+1)), xlabel='aaa')
- len(input_csv.columns) でデータの列数を取得 → 今回は 9 となります。
- for文で繰り返し処理
- iloc[:,i:i+3] で全ての行のi列~i+3列までを抽出しplot
- 項目名を指定して抜き出す→loc[]
- 列番号を指定して抜き出す→iloc[]
- figsizeはインチ単位で指定
です。
おわりに
下記を参考にしました。
Matplotlibで、たくさんの列データから必要な複数データを選択してを一つのグラフに一度に描画する賢い方法