데이터 통계는 데이터 분석과 모델링에서 핵심 역할을 합니다. 하지만 대용량 데이터나 연속적으로 발생하는 데이터와 같은 상황에서는 모든 데이터를 한 번에 메모리에 로드하지 않고, 조금씩 처리해야 할 때가 있습니다. 이러한 상황에서 이터레이터와 제너레이터를 활용하면 메모리를 효율적으로 관리하면서 데이터 통계를 수행할 수 있습니다.
이터레이터
이터레이터는 데이터 컬렉션을 반복적으로 순회하는 객체입니다. 이터레이터를 사용하면 메모리에 모든 데이터를 로드하지 않고, 필요한 만큼만 읽어서 처리할 수 있습니다. 파이썬에서는 iter()
함수를 사용하여 이터레이터를 만들 수 있습니다. 예를 들어, 다음은 리스트를 이터레이터로 만드는 예제입니다.
data = [1, 2, 3, 4, 5]
data_iter = iter(data)
for value in data_iter:
print(value)
위 코드에서 data_iter
는 data
리스트의 이터레이터입니다. iter()
함수에 리스트를 전달하여 이터레이터를 만들고, for
루프에서 이터레이터를 사용하여 순회합니다. 이렇게 하면 모든 데이터를 한 번에 메모리에 로드하지 않고, 필요한 만큼만 메모리에 유지할 수 있습니다.
제너레이터
제너레이터는 이터레이터의 한 종류로, 값을 한 번에 하나씩 생성해주는 함수입니다. 제너레이터를 사용하면 메모리를 효율적으로 사용하면서 데이터를 생성할 수 있습니다. 파이썬에서는 함수 내에서 yield
키워드를 사용하여 제너레이터를 만들 수 있습니다. 예를 들어, 다음은 1부터 10까지의 숫자를 생성하는 제너레이터 함수입니다.
def number_generator():
for i in range(1, 11):
yield i
numbers = number_generator()
for number in numbers:
print(number)
위 코드에서 number_generator
함수는 제너레이터로서, 1부터 10까지의 숫자를 생성합니다. 함수 내에서 yield
키워드를 사용하여 값을 생성하며, 생성된 값은 for
루프를 통해 순회됩니다. 이렇게 하면 숫자를 한 번에 모두 메모리에 로드하지 않고, 필요할 때마다 값을 생성하여 사용할 수 있습니다.
데이터 통계에 이터레이터와 제너레이터 활용하기
이터레이터와 제너레이터를 활용하면 대용량 데이터나 연속적으로 발생하는 데이터와 같은 상황에서도 데이터 통계를 효율적으로 수행할 수 있습니다. 이러한 경우, 매번 전체 데이터를 로드하지 않고 이터레이터나 제너레이터를 사용하여 필요한 데이터만 처리하면 됩니다. 이를 통해 메모리를 절약하면서도 필요한 통계를 추출할 수 있습니다.
def calculate_statistics(data_iter):
total = 0
count = 0
maximum = float("-inf")
minimum = float("inf")
for value in data_iter:
total += value
count += 1
if value > maximum:
maximum = value
if value < minimum:
minimum = value
average = total / count
return {
'total': total,
'count': count,
'average': average,
'maximum': maximum,
'minimum': minimum
}
data = [1, 2, 3, 4, 5]
data_iter = iter(data)
statistics = calculate_statistics(data_iter)
print(statistics)
위 코드에서 calculate_statistics
함수는 이터레이터를 입력으로 받아 데이터의 합계, 개수, 평균, 최대값, 최소값을 계산하여 딕셔너리 형태로 반환합니다. data_iter
이터레이터를 생성하여 함수에 전달하면 필요한 데이터만 읽어서 통계를 계산할 수 있습니다.
마무리
이터레이터와 제너레이터는 대용량 데이터나 연속적으로 발생하는 데이터와 같은 상황에서 메모리를 효율적으로 관리하면서 데이터 통계를 수행하는 데에 유용합니다. 이를 기반으로 한 효율적인 데이터 분석과 모델링을 위해 이터레이터와 제너레이터를 적극적으로 활용해 보세요.
#데이터통계 #이터레이터 #제너레이터