회계 밖 세상

대용량 회계 데이터 효율적으로 요약하기: Python과 SUMIF 기법 본문

IT이야기

대용량 회계 데이터 효율적으로 요약하기: Python과 SUMIF 기법

지파지파 2025. 5. 13. 15:00
반응형

회계 및 재무 분석 업무를 하다 보면 엑셀의 한계(약 1,048,576행)를 넘는 대용량 데이터를 마주치게 됩니다. 특히 대기업의 원장 데이터나 ERP 시스템에서 추출한 거래 내역은 수백만 행에 달하는 경우가 많아 엑셀에서 직접 처리하기 어렵습니다. 이 글에서는 Python을 활용해 대용량 회계 데이터를 효율적으로 요약하는 방법을 소개합니다.

문제 상황: 엑셀의 한계

A 기업의 재무팀은 연간 비용 분석을 위해 원장 데이터를 추출했습니다. 그런데 이 데이터는 무려 400만 행 이상에 달했고, 30개 이상의 컬럼으로 구성되어 있었습니다. 또한 자산 관리팀에서 추출한 유무형자산 데이터 역시 엑셀로 처리하기 어려운 크기였습니다. 이런 상황에서 데이터를 효과적으로 요약하고 의미 있는 분석을 수행하기 위한 방법이 필요했습니다.

코드 작동 원리 설명

이 코드의 핵심은 pandas의 groupby 함수입니다. 작동 방식을 단계별로 살펴보겠습니다:

  1. 데이터 불러오기: pd.read_csv() 함수로 CSV 파일을 불러옵니다. 한글이 포함된 파일은 보통 'cp949' 인코딩을 사용하지만, 때로는 'utf-8'을 사용하기도 합니다.
  2. 필드 분류:
    • 제외 필드: 개별 거래나 자산을 식별하는 고유 값들은 제외합니다(예: 거래번호, 자산ID 등).
    • 합산 필드: 수치형 데이터로 합산이 필요한 필드들을 지정합니다(예: 금액, 취득원가 등).
    • 그룹 필드: 나머지 모든 필드를 그룹화 기준으로 사용합니다.
  3. 그룹화 및 합산: df.groupby(group_fields)[sum_fields].sum() 코드로 그룹 필드별로 합산 필드의 값을 더합니다. 이것이 바로 Excel의 SUMIF 기능을 구현한 것입니다.
  4. 결과 저장: 요약된 데이터를 CSV 파일로 저장하여 Excel에서 쉽게 분석할 수 있게 합니다.

실제 사례: B은행의 대출 데이터 분석

B은행은 수백만 건의 대출 거래 데이터를 분석하여 상품별, 지역별, 고객 유형별 대출 현황을 파악하고자 했습니다. 원본 데이터는 약 500만 행에 달했습니다.

import pandas as pd

# 대출 데이터 불러오기
loan_data = pd.read_csv("loan_transactions.csv", encoding='utf-8')
print(f"원본 데이터 행 수: {len(loan_data):,}개")

# 제외할 필드 (개별 거래 식별자)
exclude_fields = ['거래ID', '계약번호', '거래일시', '처리자ID']

# 합산할 필드 (금액 관련)
sum_fields = ['대출금액', '이자금액', '수수료']

# 그룹화 기준 필드
group_fields = [col for col in loan_data.columns if col not in exclude_fields + sum_fields]

# 그룹화 및 합산
summary = loan_data.groupby(group_fields, dropna=False)[sum_fields].sum().reset_index()

print(f"요약된 행의 수: {len(summary):,}개")
print(f"압축률: {(1 - len(summary) / len(loan_data)) * 100:.2f}%")

# 결과 저장
summary.to_csv("대출현황_요약.csv", index=False, encoding='utf-8-sig')

이 코드를 실행한 결과, 500만 행의 데이터가 약 1만 5천 행으로 압축되었습니다(압축률 99.7%). 이제 엑셀에서도 충분히 분석할 수 있는 크기가 되었습니다.

또 다른 사례: C 제조업체의 생산 원가 분석

C 제조업체는 수백만 건의 생산 관련 비용 데이터를 분석하여 제품별, 공정별 원가를 계산하고자 했습니다.

import pandas as pd

# 생산 원가 데이터 불러오기
cost_data = pd.read_csv("production_costs.csv", encoding='cp949')
print(f"원본 데이터 행 수: {len(cost_data):,}개")

# 제외할 필드
exclude_fields = ['작업지시번호', '작업일자', '작업시간', '작업자ID']

# 합산할 필드
sum_fields = ['원재료비', '노무비', '제조경비', '에너지비용']

# 그룹화 기준 필드 (모든 제품 및 공정 관련 필드)
group_fields = ['제품코드', '제품명', '공정코드', '공정명', '설비코드', '설비명', '품질등급']

# 그룹화 및 합산
summary = cost_data.groupby(group_fields, dropna=False)[sum_fields].sum().reset_index()

print(f"요약된 행의 수: {len(summary):,}개")
print(f"압축률: {(1 - len(summary) / len(cost_data)) * 100:.2f}%")

# 결과 저장
summary.to_csv("제품별_공정별_원가_요약.csv", index=False, encoding='utf-8-sig')

효과: 데이터 압축과 분석 효율성 증대

이 방법의 가장 큰 장점은 데이터 압축률입니다. 예를 들어, 500만 행 이상이었던 B은행의 대출 데이터가 1만 5천 행 수준으로 압축된 것처럼, 대부분의 경우 99% 이상의 압축률을 얻을 수 있습니다. 이렇게 압축된 데이터는 Excel에서도 충분히 다룰 수 있는 크기가 됩니다.

A 기업의 비용 데이터에 이 코드를 적용한 결과, 다음과 같은 효과를 얻었습니다:

  • 원본 데이터: 약 400만 행
  • 요약 데이터: 약 4만~5만행 (정확한 수치는 데이터 특성에 따라 다름)
  • 압축률: 약 99%

응용: 다양한 그룹화 조합 테스트하기

실무에서는 데이터 특성에 따라 최적의 그룹화 필드 조합을 찾는 것이 중요합니다. 예를 들어, C 제조업체의 생산 원가 데이터는 다음과 같은 다양한 조합으로 그룹화해볼 수 있습니다:

  • 제품코드만으로 그룹화
  • 제품코드 + 공정코드로 그룹화
  • 제품코드 + 설비코드로 그룹화
  • 제품코드 + 공정코드 + 품질등급으로 그룹화

각 조합별로 데이터의 압축률과 분석 가치를 비교하여 최적의 요약 방식을 선택할 수 있습니다.

비용 데이터의 경우 다음과 같은 조합으로 그룹화를 시도해볼 수 있습니다:

  • 계정코드만으로 그룹화
  • 계정코드 + 부서코드로 그룹화
  • 계정코드 + 사업부코드로 그룹화
  • 계정코드 + 부서코드 + 비용유형으로 그룹화
  • 계정코드 + 부서코드 + 프로젝트코드로 그룹화

결론: 대용량 데이터 다루기의 새로운 지평

Python과 pandas 라이브러리를 활용하면 Excel의 한계를 뛰어넘어 대용량 회계 데이터를 효율적으로 다룰 수 있습니다. 이 방법은 다음과 같은 장점이 있습니다:

  1. 처리 속도: 수백만 행의 데이터도 몇 초 내에 요약 가능
  2. 메모리 효율성: Excel이 감당하지 못하는 크기의 데이터도 처리 가능
  3. 유연성: 다양한 그룹화 조합을 쉽게, 빠르게, 반복적으로 시도 가능
  4. 재현성: 코드를 저장하여 동일한 분석을 다른 데이터에도 쉽게 적용 가능

회계사나 재무 분석가가 아니더라도, 대용량 데이터를 다루는 모든 분야에서 이러한 접근 방식이 유용할 것입니다. Python은 초보자도 배우기 쉬운 언어이며, 이 정도의 간단한 코드는 프로그래밍 경험이 적은 사람도 충분히 활용할 수 있습니다.

대용량 데이터 시대에 Excel만으로는 한계가 있습니다. Python을 도구 상자에 추가하여 데이터 분석의 새로운 지평을 열어보시기 바랍니다.

반응형