파이썬에서 히스토리 클래스는 일련의 데이터를 시간 순서대로 저장하고 관리하는 기능을 수행하는 클래스일 것입니다. 예를 들어, 사용자의 작업 이력이나, 시간에 따른 데이터 변화 등을 기록하고 조회할 수 있는 클래스입니다. 이와 같은 목적을 위해 적합한 다차원 자료구조에는 다음과 같은 것들이 있습니다.
1. 리스트의 리스트 (2차원 배열)
리스트를 사용하여 각 타임스탬프에 해당하는 데이터를 2차원 리스트로 저장할 수 있습니다. 각 서브리스트는 하나의 타임스탬프에서 저장된 데이터를 나타냅니다.
예시:
class History:
def __init__(self):
# 히스토리를 저장할 2차원 리스트
self.history = []
def add_record(self, timestamp, data):
# 기록을 추가
self.history.append([timestamp, data])
def get_record(self, index):
# 특정 인덱스의 기록을 조회
return self.history[index]
# 히스토리 클래스 사용 예시
h = History()
h.add_record("2024-10-22 10:00", {"temperature": 20, "humidity": 50})
h.add_record("2024-10-22 11:00", {"temperature": 21, "humidity": 55})
# 첫 번째 기록 조회
print(h.get_record(0)) # 출력: ['2024-10-22 10:00', {'temperature': 20, 'humidity': 50}]
2. 딕셔너리의 리스트
시간 순서와 데이터를 연결할 때 딕셔너리를 사용할 수 있습니다. 각 타임스탬프를 키로 하고 그에 해당하는 데이터를 값으로 저장할 수 있습니다.
예시:
class History:
def __init__(self):
# 히스토리를 저장할 딕셔너리
self.history = {}
def add_record(self, timestamp, data):
# 기록을 타임스탬프를 키로 하여 딕셔너리에 저장
self.history[timestamp] = data
def get_record(self, timestamp):
# 특정 타임스탬프의 기록을 조회
return self.history.get(timestamp, "기록 없음")
# 히스토리 클래스 사용 예시
h = History()
h.add_record("2024-10-22 10:00", {"temperature": 20, "humidity": 50})
h.add_record("2024-10-22 11:00", {"temperature": 21, "humidity": 55})
# 특정 시간 기록 조회
print(h.get_record("2024-10-22 10:00")) # 출력: {'temperature': 20, 'humidity': 50}
3. 큐(Queue)를 사용한 시간 기반 자료구조
시간에 따라 자료가 축적되는 히스토리 구조에서, 최신 데이터와 오래된 데이터를 구분하여 FIFO(First-In, First-Out) 방식으로 관리할 수도 있습니다. collections.deque
를 사용하여 효율적인 큐 자료구조를 구현할 수 있습니다.
예시:
from collections import deque
class History:
def __init__(self, max_size=10):
# 고정 크기의 큐를 사용해 히스토리를 관리
self.history = deque(maxlen=max_size)
def add_record(self, timestamp, data):
# 큐에 기록을 추가 (큐가 꽉 차면 가장 오래된 기록이 제거됨)
self.history.append((timestamp, data))
def get_all_records(self):
# 모든 기록을 반환
return list(self.history)
# 히스토리 클래스 사용 예시
h = History(max_size=5)
h.add_record("2024-10-22 10:00", {"temperature": 20, "humidity": 50})
h.add_record("2024-10-22 11:00", {"temperature": 21, "humidity": 55})
h.add_record("2024-10-22 12:00", {"temperature": 22, "humidity": 60})
# 모든 기록 조회
print(h.get_all_records())
# 출력: [('2024-10-22 10:00', {'temperature': 20, 'humidity': 50}), ...]
4. 판다스 데이터프레임 (DataFrame)
좀 더 복잡한 시간 기반 데이터를 처리하려면 pandas
의 DataFrame을 사용할 수 있습니다. 타임스탬프를 인덱스로 사용해 데이터의 변화를 관리하기에 매우 유용합니다.
예시:
import pandas as pd
class History:
def __init__(self):
# 빈 데이터프레임 생성
self.history = pd.DataFrame(columns=["timestamp", "temperature", "humidity"])
def add_record(self, timestamp, temperature, humidity):
# 데이터프레임에 기록 추가
new_record = pd.DataFrame([[timestamp, temperature, humidity]],
columns=["timestamp", "temperature", "humidity"])
self.history = pd.concat([self.history, new_record], ignore_index=True)
def get_history(self):
# 전체 히스토리 반환
return self.history
# 히스토리 클래스 사용 예시
h = History()
h.add_record("2024-10-22 10:00", 20, 50)
h.add_record("2024-10-22 11:00", 21, 55)
# 전체 히스토리 조회
print(h.get_history())
요약:
- 리스트의 리스트: 간단한 기록 저장에 적합.
- 딕셔너리의 리스트: 타임스탬프 기반 데이터 저장에 유용.
- 큐 (deque): 제한된 크기로 기록을 관리할 때 효율적.
- 판다스 DataFrame: 시간 기반 데이터 분석에 적합.
히스토리 클래스의 복잡도와 성능 요구에 따라 적절한 자료구조를 선택하면 됩니다.
'다차원 자료구조 응용' 카테고리의 다른 글
[다차원 자료구조 응용] 타임트랙의 다차원 자료구조 예시 (10) | 2024.10.27 |
---|---|
[다차원 자료구조 응용] 병렬처리에 적합한 다차원 자료구조 모델 (0) | 2024.10.24 |
[다차원 자료구조 응용] 다차원 자료구조 기반의 콘텐츠 추천 시스템 (5) | 2024.10.20 |
[다차원 자료구조 응용] 게임 개발 분야 다차원 자료구조 (15) | 2024.10.18 |
[다차원 자료구조 응용] 컴퓨터 시뮬레이션 분야 다차원 자료구조 (8) | 2024.10.18 |