見出し画像

ブックマーク必須!Pandas・datetimeで行う時系列データ処理大全

こんにちは、コグラフ株式会社データアナリティクス事業部の平松です。
今回は時系列データの処理方法についてまとめました。
時系列データ分析の前処理に必須の情報が盛りだくさんです!
是非、ご一読ください。


pandas、datetimeについての説明

時系列データ処理で使うライブラリ、モジュールはPandas、datetimeです。
目的によりますが、基本的な時系列処理はこれらで十分可能だと思います。

Pandasで使うメソッドはpd.to_datetimeです。

目的別処理内容

まず必要なライブラリ、モジュールを準備します。

import pandas as pd
import datetime


現在の年月日、時間の出力

now = datetime.datetime.now()
now
出力結果

now()は現在の年からマイクロ秒まで出力してくれます。
datetime.now()で取得可能。datetime型が返ってきます。

年、月、日にち、時間、分の出力

print(now.year)
print(now.month)
print(now.day)
print(now.time())
print(now.minute)
print(type(now.time()))
出力結果

now()と同様の要領で、yearのメソッドを入れると年のみが返ってきます。
monthだと月という感じです。
time()は時間、分、秒、マイクロ秒までが出力されます。

現在と指定した日付との差を取得

delta = datetime.datetime.now() - datetime.datetime(2013, 9, 6)
print(delta)
print(type(delta))
出力結果

datetimeからdatetimeの引き算をすると、出力結果はtimedeltaになります。

1日前の日にち、時間の出力

start = datetime.datetime.now()
end = start + datetime.timedelta(days=-1)
print(end)
print(type(end))
出力結果

timedeltaは引数にdays以外に、(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)などをとれます。

時間のデータフレームの作成

df = pd.DataFrame({'year': [2022, 2023],
                   'month': [8, 9],
                   'day': [6, 7]})
pd.to_datetime(df)
出力結果

出力結果はしっかりとdatetime型になっています。

str型→timestamp型

time = '2020/01/01'
print(type(time))
pd.to_datetime(time)
time = '20200101'
print(type(time))
pd.to_datetime(time)
出力結果

上記の形で時間が格納されている場合、timestamp型にすることが可能です。

int型→datetime型

time = pd.Series([20200101, 20210101, 20220101])
convert_time = pd.to_datetime(time, format='%Y%m%d')
convert_time
出力結果


int型、str型→timestamp型にして引き算

time = pd.Series([20200101, 20210101, 20220101])
time2 = pd.Series(["2016年01月01日 05時25分", "2018年01月01日 05時25分", "2020年01月01日 05時25分"])
convert_time = (pd.to_datetime(time2, format='%Y年%m月%d日 %H時%M分').dt.date 
               - pd.to_datetime(time, format='%Y%m%d').dt.date)
convert_time
出力結果


timestamp型、datetime型→str型

strfttime()は時刻をstr型にして取得するメソッドです。
引数に形を指定すると取得できます。

now.strftime('%Y.%m.%d, %H:%M:%S')
出力結果
now.strftime('%A, %B, %d, %Y')
出力結果
now.strftime('%Y年%m月%d日')
出力結果
datetime.datetime.strptime("1991-11-05", "%Y-%m-%d")
出力結果


返される型の確認

few_days = now + datetime.timedelta(days=5)
print(type(few_days))

d_few_days = pd.to_datetime(few_days)
print(type(d_few_days))
出力結果

nowはdatetimeモジュールのメソッドです。
したがって、few_daysはdatetime型になります。
pandasのto_datetime()メソッドは、timestamp型を返すので、d_few_daysはtimestamp型になります。
しかし、datetime型とtimestamp型での四則演算は可能なので、あまり気にしなくても問題ありません。

インターバルの計算

df = pd.read_csv("C:\\CSV\\AirPassengers.csv", index_col='Month', parse_dates=True)
df = df.reset_index()

df['Month'] = pd.to_datetime(df['Month'])
df['shift_month'] = df['Month'].shift(1)
df['delta_month'] = df['Month'] - df['shift_month']
df
出力結果

shift()は行をずらす関数です。引数にが正の整数の場合、下方向に、とった引数分ずらします。負の整数だった場合、上方向に、とった引数ぶんずらします。
上記の例では引数は1なので、df['Month']を下方向へ一行ずらします。
df['Month']はto_datetime()によってtimestamp型にしたので引き算が可能です。
その出力結果がdf[delta_month]になります。

月単位に丸める

delta_month = pd.to_datetime(df['Month']).dt.month - pd.to_datetime('2000-02-01').month
delta_month
出力結果

dt.monthでdf['Month']を月までの表示に丸めることが可能です。
また月までの表示に丸めた状態で引き算をすると、この場合、返される値はintになります。
dtはdatetimeの略で、dtを付けずにmonthを付けるとエラーになります。
また、yearやdateなども可能です。


データ分析に興味のある方募集中!

コグラフ株式会社データアナリティクス事業部ではPythonやSQLの研修を行った後、実務に着手します。
研修内容の充実はもちろん、経験者に相談できる環境が備わっています。
このようにコグラフの研修には、実務を想定し着実にスキルアップを目指す環境があります。
興味がある方は、下記リンクよりお問い合わせください。

Twitterもやってます!

コグラフデータ事業部ではTwitterでも情報を発信しています。
データ分析に興味がある、データアナリストになりたい人など、ぜひフォローお願いします!


この記事が気に入ったらサポートをしてみませんか?