正規表現(Regular Expression)は、文字列操作を強力に支援するツールです。ログ解析、データクレンジング、テキスト検索と置換など、さまざまな用途で活用されています。本記事では、Pythonで正規表現を使って日付データを抽出し、そのデータを操作する方法について解説します。
1. 正規表現とは何か?
正規表現(Regular Expression)は、特定のパターンに一致する文字列を検索・抽出するための手法です。Pythonでは re
モジュールを使用します。
2. 使用するデータセット
このデータセットは、日時、数値、ステータスの3つのフィールドを含むデータのリストです。
- 日時: ‘YYYY/MM/DD HH:MM:SS’ 形式で記録された日時。
- 数値: 取引価格や測定値を表す整数。
- ステータス: データのラベルやランキングを示す識別子。
series = """
'2024/01/08 12:00:00', 100, '1st';
'2024/01/08 12:30:00', 110, '2st';
'2024/01/08 13:00:00', 120, '3st'
"""
3. ステップ1: 日付と時間を抽出する正規表現
import re
# 正規表現パターン
pattern = re.compile(r"\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}")
# 抽出
result = pattern.findall(series)
print("抽出された日時:", result)
4. ステップ2: 抽出した日時をPythonの日時型に変換
from datetime import datetime
# 日時型に変換
pydt = datetime.strptime(result[0].replace("'", ""), '%Y/%m/%d %H:%M:%S')
print(pydt)
5. ステップ3: 抽出データの操作
抽出した日付データは、さまざまな用途に活用できます。例えば、ログ解析では特定の期間のデータを抽出してトレンド分析を行ったり、レポート作成ではデータの整理・分類に利用できます。また、IoTデバイスの時系列データや金融市場の価格変動データを処理する際にも役立ちます。
5.1 例1: 秒単位の加算
from datetime import timedelta
# 10秒加算
new_time = pydt + timedelta(seconds=10)
print(new_time)
5.2 例2: 特定範囲内の日時を抽出
# 12時以内の時間を抽出
filtered = [dt for dt in result if re.search(r"12:\d{2}:\d{2}", dt)]
print(filtered)
6. 注意点
- パターンが複雑になるとパフォーマンスが低下する可能性がある。
- 入力データが予期しない形式の場合、エラーが発生することがある。
エラー処理の例
以下のコードでは、入力データが期待通りの形式でない場合にエラーハンドリングを行います。
from datetime import datetime
def safe_parse_date(date_str):
try:
return datetime.strptime(date_str.replace("'", ""), '%Y/%m/%d %H:%M:%S')
except ValueError:
print(f"エラー: 無効な日付形式 - {date_str}")
return None
# 例
dates = ["2024/01/08 12:00:00", "invalid date", "2024/01/08 13:00:00"]
parsed_dates = [safe_parse_date(date) for date in dates]
print(parsed_dates)
このように、データのフォーマットが異なる場合でもプログラムがエラーで停止しないようにすることが重要です。 2. 入力データが予期しない形式の場合、エラーが発生することがある。
7. まとめ
正規表現を使うことで、データから必要な情報を効率的に抽出し、Pythonの機能と組み合わせることでさらなる操作が可能です。
正規表現の活用シナリオ
- ログ解析: 大量のログデータから特定のエラーやイベントを抽出。
- データクレンジング: 不規則なフォーマットのデータから一貫した情報を取得。
- レポート作成: 時系列データの整理や集計に利用。
- テキスト処理: ウェブスクレイピングで取得したデータから必要な情報のみ抽出。
日付データの抽出や複雑な情報の処理を行う際に、正規表現を適切に活用することで、作業の自動化や効率化が実現できます。