Python(Pandas)にて月ごと・日ごと・時間ごとの集計を行う方法【monthやdayやhourとgroupby】 | ウルトラフリーダム

Python(Pandas)にて月ごと・日ごと・時間ごとの集計を行う方法【monthやdayやhourとgroupby】

Python3
本サイトでは記事内に広告が含まれています。

Jupyter notebook(Python3)を使ってみようと思っても慣れていないうちは、どうしても処理に躓いてしまうものです。

例えば、PythonのPandasライブラリを用いてデータから月ごと・二ごと・時間ごとなどに集計していくにはどう処理すればいいのか理解していますか。

ここではこのpandasにて月ごと・日ごと・時間ごとの集計を行う方法について確認していきます。

 

スポンサーリンク

Python(Pandas)にて月ごとの集計を行う方法【month】

それでは以下のサンプルデータを用いてpythonにて月毎の集計を行う方法について確認していきます。

集計といっても月ごとの合計、平均、標準偏差などいくつかの処理方法がありますが、基本的には

・月ごとにまとめる操作

・最後に実行したい集計方法の関数(平均など)の実行

という流れにて処理すればいいです。

以下のようなcsvを読み込み、月別の集計として今回は平均値を求めてみましょう。

import os
os.chdir(“C://sample”)
import pandas as pd
df = pd.read_csv(“sample.csv”,encoding=”SHIFT JIS”, index_col=0, parse_dates=True)
df = df.set_index([df.index,df.index.month])
df.index.names = [“date”,”month”]
df.mean(level=’month’)

と処理することで月ごとの集計が完了します。

 

コードの意味の詳細を解説していきます。

import os

os.chdir(“C://sample”)

→osライブラリのインポートし、csvが置いてあるディレクトリへ移動しています。

import pandas as pd

df = pd.read_csv(“sample.csv”,encoding=”SHIFT JIS”, index_col=0, parse_dates=True)

→pandasをインポートし、csvの読み込みしています。最後の index_col=0, parse_dates=Trueにて0行目(最も左の日時データ)をインデックスとし、これを文字ではなく日時として読み込む処理をしています

 

df = df.set_index([df.index,df.index.month])

→これはマルチインデックス(インデックスが複数)にして処理しています。

日時データの場合個人的にはマルチインデックスにした方が見やすいので、このように処理しています。インデックス1列目に日時すべて(df.indexの部分、、インデックス2列目に月のみ(df.index.monthの部分)を表示させています。

 

df.index.names = [“date”,”month”]

→上のマルチインデックスの各列をdate(日時すべて)とmonth(月のみ)という名称に変更しています。

 

df.mean(level=’month’)

→月ごとの集計(今回は平均(mean)を実行しています。

 

コードは1行ずつ丁寧に見ていけば意味がわかってきますので、じっくりと見るのが大事ですね。

 

月毎の集計として指定の月のみの集計をしたい時

基本的には上の処理でpandasでの月ごとの集計ができますが、3月だけとか1部のみを出力したいこともあるでしょう。

この場合には以下のようマルチインデックスでなく、インデックスを1列のみで処理する必要があります。

import os
os.chdir(“C://sample”)
import pandas as pd
df = pd.read_csv(“sample.csv”,encoding=”SHIFT JIS”, index_col=0, parse_dates=True)
df.index.month
df.index.names = [“month”]
df[df.index.month == 3].mean()

こちらの処理方法も併せて理解しておくといいですね。

 

Python(Pandas)にて日ごとの集計を行う方法【day】

さらにはpandasでの日毎の集計方法を見ていきます。

今度は以下のサンプルデータを使用します。

処理方法自体は上の月ごとの集計と同等ですが、月ではなく日毎でのインデックス作成やスライスを行っています。

 

途中までは月ごとの集計と同じですが、スライスの段階で以下のよう日ごとの集計となるよう調整するといいです。

df = df.set_index([df.index,df.index.day])
df.index.names = [“date”,”day”]
df.groupby(level=[“day”]).mean()

だいたいコツがつかめてきたことでしょう。

 

Python(Pandas)にて時間ごとの集計を行う方法【hour:時刻ごと】

さらにはpandasにて時刻ごとの集計を行う方法も見ていきましょう。

今度は以下のよう時間ごとに集計したい場合のデータを用いてみます。

途中までは同じで

df = df.set_index([df.index,df.index.hour])
df.index.names = [“date”,”hour”]
df.groupby(level=[“hour”]).mean()

とスライスのレベルをhourに変えるだけで、時間ごとの集計が完了です。

 

まとめ Python(Pandas)にて日ごと・時間ごとの集計を行う方法【monthやdayやhourとgroupby】

ここでは、Python(Pandas)にて月ごと・日ごと・時間ごとの集計を行う方法【monthやdayやhourとgroupby】について解説しました。

日時データとしてインデクスを読み込み、処理したい機関でスライスしたインデックスを作成するのがポイントですね。

Pandas(Python)での各種処理方法に慣れ、より効率的なデータ解析を行っていきましょう。

コメント

タイトルとURLをコピーしました