[python] Marshmallow를 사용한 데이터 집계와 그룹화 처리 방법

마샬마로(Marshmallow)는 Python에서 데이터 직렬화 및 역직렬화를 효율적으로 처리하기 위한 라이브러리입니다. 이번 포스트에서는 마샬마로를 사용하여 데이터를 집계하고 그룹화하는 방법에 대해 알아보겠습니다.

1. Marshmallow 설치하기

먼저 마샬마로를 설치해야 합니다. 아래의 명령을 사용하여 pip를 통해 마샬마로를 설치할 수 있습니다:

pip install marshmallow

2. 데이터 집계하기

마샬마로를 사용하여 데이터를 집계하려면 먼저 스키마(Schema)를 정의해야 합니다. 스키마는 집계할 데이터의 구조를 정의하는 역할을 합니다. 다음은 예시 스키마의 코드입니다:

from marshmallow import Schema, fields

class MySchema(Schema):
    name = fields.Str()
    age = fields.Int()
    gender = fields.Str()

위의 예시에서는 name, age, gender라는 세 개의 필드를 가진 스키마를 정의했습니다. 이제 실제 데이터를 이 스키마에 매핑하여 집계할 수 있습니다.

from marshmallow import Schema, fields

class MySchema(Schema):
    name = fields.Str()
    age = fields.Int()
    gender = fields.Str()

# 데이터
data = [
    {"name": "John", "age": 25, "gender": "Male"},
    {"name": "Alice", "age": 30, "gender": "Female"},
    {"name": "Bob", "age": 28, "gender": "Male"},
]

# 스키마 인스턴스 생성
schema = MySchema(many=True)

# 데이터 집계
result = schema.dump(data)

print(result)

위의 예시에서는 MySchema의 인스턴스를 만들고, dump 메서드를 사용하여 데이터를 집계합니다. dump 메서드는 데이터를 스키마에 맞게 직렬화하여 결과를 반환합니다.

3. 데이터 그룹화하기

데이터를 그룹화하기 위해선 fields.Nestedfields.List를 사용하여 스키마 간의 관계를 정의해야 합니다. 예를 들어, 위의 예시 데이터를 성별로 그룹화한다고 가정해 봅시다.

from marshmallow import Schema, fields

class MySchema(Schema):
    name = fields.Str()
    age = fields.Int()

class GenderSchema(Schema):
    gender = fields.Str()
    members = fields.Nested(MySchema, many=True)

# 데이터
data = [
    {"name": "John", "age": 25, "gender": "Male"},
    {"name": "Alice", "age": 30, "gender": "Female"},
    {"name": "Bob", "age": 28, "gender": "Male"},
]

# 성별별로 그룹화
grouped_data = {}

for item in data:
    gender = item["gender"]
    if gender not in grouped_data:
        grouped_data[gender] = []
    grouped_data[gender].append(item)

# 스키마 인스턴스 생성
schema = GenderSchema()

# 데이터 그룹화
result = schema.dump(grouped_data)

print(result)

위의 예시에서는 MySchemaGenderSchema를 정의하여 데이터를 그룹화했습니다. GenderSchema에서 members 필드는 MySchema의 인스턴스들을 그룹화시킬 때 사용됩니다.

마샬마로를 사용하면 간편하게 데이터를 집계하고 그룹화할 수 있습니다. 이를 통해 복잡한 데이터의 처리를 효율적이고 직관적으로 처리할 수 있습니다.

참고 자료

  1. Marshmallow 공식 문서
  2. Marshmallow 스키마 가이드