이터레이터와 제너레이터를 활용한 데이터 통합

데이터 통합은 다양한 데이터 소스에서 데이터를 수집하여 하나의 통합된 형태로 변환하는 과정입니다. 이 과정은 대용량의 데이터를 다룰 때 특히 중요하며, 효율적이고 유연한 방법으로 데이터를 처리해야 합니다.

이터레이터와 제너레이터는 파이썬에서 데이터를 처리하고 변환하는 데 유용한 도구입니다. 이들은 메모리 사용을 최적화하면서 데이터를 조작하는 데 강력한 기능을 제공합니다.

이터레이터

이터레이터는 반복 가능한 객체를 순회하면서 하나씩 요소를 반환하는 객체입니다. 파이썬에서는 리스트, 튜플, 딕셔너리 등과 같은 데이터 구조를 순회할 때 사용됩니다.

numbers = [1, 2, 3, 4, 5]
iter_obj = iter(numbers)

print(next(iter_obj))  # 1
print(next(iter_obj))  # 2
print(next(iter_obj))  # 3

이터레이터는 iter() 함수로 생성되며, next() 함수로 다음 값을 가져올 수 있습니다. 이터레이터는 더 이상 반환할 값이 없을 때 StopIteration 예외를 발생시킵니다.

제너레이터

제너레이터는 이터레이터의 한 종류로, 이터레이터를 간편하게 생성할 수 있도록 해줍니다. 제너레이터는 함수의 실행 중간에 일시 중단되고, 다음 실행에서 이전 상태를 기억하여 값을 반환합니다. 이를 통해 매번 모든 값을 메모리에 로드하지 않고도 효율적으로 데이터를 생성할 수 있습니다.

def square_numbers(nums):
    for num in nums:
        yield num * num

my_nums = [1, 2, 3, 4, 5]
my_gen = square_numbers(my_nums)

for num in my_gen:
    print(num)

# 출력 결과:
# 1
# 4
# 9
# 16
# 25

제너레이터는 yield 키워드를 사용하여 값을 반환하며, 함수 실행 중에 다음 값을 생성할 때까지 일시 중단됩니다. 제너레이터는 필요한 만큼의 값을 생성하고, 메모리 사용을 최소화합니다.

데이터 통합 예제

이터레이터와 제너레이터를 활용하여 데이터 통합을 실제로 구현해 보겠습니다. 예를 들어, 여러 개의 CSV 파일에서 데이터를 읽어와 하나의 통합된 CSV 파일로 저장하는 과정을 살펴봅시다.

import csv

def read_multiple_csv(files):
    for file in files:
        with open(file, 'r') as csv_file:
            reader = csv.reader(csv_file)
            # 각 CSV 파일에서 데이터 읽기 및 가공 작업 수행
            for row in reader:
                # 데이터 가공 및 통합 작업 수행
                processed_data = process_data(row)
                yield processed_data

def process_data(row):
    # 데이터 가공 및 통합 로직 수행
    # ...

csv_files = ['file1.csv', 'file2.csv', 'file3.csv']
merged_data = read_multiple_csv(csv_files)

with open('merged_data.csv', 'w') as merged_file:
    writer = csv.writer(merged_file)
    for data in merged_data:
        writer.writerow(data)

위 예제에서 read_multiple_csv() 함수는 여러 개의 CSV 파일을 순회하면서 데이터 읽기와 가공 작업을 수행하는 제너레이터를 반환합니다. process_data() 함수에서는 각 행마다 데이터 가공 로직을 수행하며, 통합된 데이터를 반환합니다. 이렇게 제너레이터를 활용하면 메모리 사용을 최소화하고 대용량의 데이터도 효율적으로 처리할 수 있습니다.

#데이터통합 #이터레이터 #제너레이터