[Python]Pandasを使った時間差分の計算方法

はじめに

時間データの扱いはデータ分析や可視化において非常に重要です。特に、時間差分を計算することは、データの変化やイベント間の時間的な関係を理解するために必要な作業です。本記事では、Pythonのデータ分析ライブラリであるPandasを使って時間差分の計算方法について解説します。

時間データの前処理

まずは、時間データを適切な形式に変換する方法について説明します。Pandasでは、日時データを扱うためのデータ型である「Datetime型」を提供しています。まずは、文字列型の時間データをDatetime型に変換する方法を見てみましょう。

import pandas as pd
# 時間データの文字列
time_str = '2021-01-01 12:30:00'
# 文字列からDatetime型に変換
time = pd.to_datetime(time_str)
print(time)

上記のコードを実行すると、以下のような出力結果が得られます。

2021-01-01 12:30:00

次に、Unix時間(エポック秒)からDatetime型に変換する方法を見てみましょう。

# Unix時間(エポック秒)
unix_time = 1609455000
# Unix時間からDatetime型に変換
time = pd.to_datetime(unix_time, unit='s')
print(time)

上記のコードを実行すると、以下のような出力結果が得られます。

2021-01-01 12:30:00

基本的な時間差分の計算

次に、Pandasを使って基本的な時間差分を計算する手順について説明します。Pandasでは、Datetime型の列同士の差分を計算することができます。以下の例では、2つの時間データの差分を計算しています。

# 時間データのリスト
times = ['2021-01-01 12:30:00', '2021-01-01 13:00:00']
# リストからDatetime型に変換
time1 = pd.to_datetime(times[0])
time2 = pd.to_datetime(times[1])
# 時間差分の計算
diff = time2 - time1
print(diff)

上記のコードを実行すると、以下のような出力結果が得られます。

0 days 00:30:00

差分は「0 days 00:30:00」という形式で表示されます。この形式を使って、時間差や分差、秒差を取得することができます。以下の例では、差分の時間部分を取得しています。

diff_hour = diff.components.hours
print(diff_hour)

上記のコードを実行すると、以下のような出力結果が得られます。

0

複雑な時間差分の計算

さらに、異なる時間単位(秒、分、時間、日など)での差分計算方法について説明します。Pandasでは、時間差分を表現するための「Timedelta型」を提供しています。

以下の例では、2つの時間データの差分を秒単位で計算しています。

# 時間データのリスト
times = ['2021-01-01 12:30:00', '2021-01-01 13:00:00']
# リストからDatetime型に変換
time1 = pd.to_datetime(times[0])
time2 = pd.to_datetime(times[1])
# 時間差分の計算(秒単位)
diff = (time2 - time1).total_seconds()
print(diff)

上記のコードを実行すると、以下のような出力結果が得られます。

1800.0

差分は「1800.0」という形式で表示されます。この形式を使って、分差や時間差、日差を取得することができます。以下の例では、差分の分部分を取得しています。

diff_minute = (time2 - time1).components.minutes
print(diff_minute)

上記のコードを実行すると、30という出力結果が得られます。

実践例

実際のデータセットを用いて時間差分の計算を行う例を見てみましょう。

以下の例では、あるイベントが発生した時刻を含むデータセットを作成し、イベント間の時間差を計算しています。

# データフレームの作成
df = pd.DataFrame({'time': ['2021-01-01 12:30:00', '2021-01-01 13:00:00', '2021-01-01 14:00:00']})
# 時間データの変換
df['time'] = pd.to_datetime(df['time'])
# 時間差分の計算
df['diff'] = df['time'].diff()
print(df)

上記のコードを実行すると、以下のような出力結果が得られます。

                 time     diff
0 2021-01-01 12:30:00      NaT
1 2021-01-01 13:00:00 00:30:00
2 2021-01-01 14:00:00 01:00:00

差分は「NaT」(Not a Time)という値で表されることに注意してください。これは、最初の行の差分が存在しないことを示しています。

時間差分を利用した応用解析

最後に、時間差分を使ったデータ解析や可視化の応用例について紹介します。

例えば、あるイベントが発生する頻度を分析する場合には、イベント間の時間差を計算し、その分布を可視化することが有効です。以下の例では、あるイベントが発生する時刻を含むデータセットを作成し、イベント間の時間差のヒストグラムを作成しています。

# データフレームの作成
df = pd.DataFrame({'time': ['2021-01-01 12:30:00', '2021-01-01 13:00:00', '2021-01-01 14:00:00']})
# 時間データの変換
df['time'] = pd.to_datetime(df['time'])
# 時間差分の計算
df['diff'] = df['time'].diff()
# ヒストグラムの作成
df['diff'].dt.total_seconds().hist()
plt.xlabel('Time Difference (seconds)')
plt.ylabel('Frequency')
plt.title('Distribution of Time Differences')
plt.show()

上記のコードを実行すると、時間差のヒストグラムが表示されます。このヒストグラムから、イベント間の時間差の分布や頻度を把握することができます。

まとめ

本記事では、Pythonのデータ分析ライブラリであるPandasを使った時間差分の計算方法について解説しました。時間データの前処理から基本的な時間差分の計算までを網羅し、さらに複雑な時間差分の計算や応用解析の例も紹介しました。時間データの扱いはデータ分析や可視化において重要な要素ですので、ぜひこの記事を参考にしてください。