지난 포스팅에서는 흩어져 있던 수십 개의 CSV(엑셀) 파일들을 파이썬의 glob과 concat을 이용하여 단 1초 만에 'Master_Dataset.csv'라는 거대한 하나의 파일로 병합하는 자동화 스크립트를 구축했습니다. 하지만 수천, 수만 줄에 달하는 로우 데이터(Raw data) 자체는 우리에게 어떤 정보도 주지 못합니다. 이 방대한 숫자의 바다에서 "어떤 합성 조건이 가장 밴드갭이 좁은가?", "어떤 소재가 가장 높은 수율을 보이는가?"와 같은 핵심 인사이트를 도출하려면 데이터를 의미 있는 기준에 따라 묶고 요약해야 합니다. 엑셀(Excel)에서 마우스를 드래그하여 피벗테이블을 만드는 대신, 파이썬의 강력한 Pandas 라이브러리를 사용하면 이 모든 요약 과정을 단 몇 줄의 코드로 영구적인 자동화 파이프라인으로 굳힐 수 있습니다. 이번 포스팅에서는 데이터 분석의 핵심 기술인 '그룹화(Groupby)'와 다차원 요약인 '피벗테이블(Pivot Table)'을 완벽하게 마스터해 보겠습니다.
1. 데이터 쪼개고 합치기: Groupby의 원리 (Split-Apply-Combine)
Pandas의 `groupby()` 함수는 데이터 분석가들이 가장 사랑하는 기능 중 하나입니다. 이 함수의 작동 원리는 이른바 'Split(분리) - Apply(적용) - Combine(결합)'의 3단계로 이루어집니다.
예를 들어, 1,000개의 논문 실험 데이터가 있다고 가정해 보겠습니다. 먼저 연구자가 지정한 기준(예: 소재 종류)에 따라 데이터를 여러 덩어리로 쪼갭니다(Split). 그런 다음 각 덩어리에 대해 통계 함수(평균, 최대값, 최소값, 개수 등)를 계산합니다(Apply). 마지막으로 계산된 결과들을 다시 하나의 깔끔한 표로 합쳐서 반환합니다(Combine). 엑셀의 '부분합' 기능과 비슷하지만, 파이썬에서는 `df.groupby('소재')['밴드갭'].mean()`이라는 단 한 줄의 직관적인 코드로 이 모든 복잡한 연산이 순식간에 끝납니다.
2. 다차원 분석의 꽃: 파이썬으로 구현하는 Pivot Table
Groupby가 데이터를 1차원적으로 묶어서 요약해 준다면, `pivot_table()` 함수는 행(Row)과 열(Column)의 두 가지 기준을 교차시켜 데이터를 2차원의 입체적인 매트릭스로 요약해 주는 강력한 도구입니다.
연구를 하다 보면 "소재 종류별(행)로 합성 온도(열)에 따라 최종 수율(값)이 어떻게 변하는가?"를 엑셀 표의 형태로 정리해야 논문에 삽입할 수 있습니다. 엑셀에서는 일일이 필드를 드래그 앤 드롭해야 하지만, Pandas에서는 `pd.pivot_table(df, index='소재', columns='온도', values='수율', aggfunc='mean')`이라고 정의해 주기만 하면, 비어있는 조건은 자동으로 NaN으로 처리하면서 완벽하게 정렬된 논문용 통계 표를 즉각적으로 생성해 냅니다.
3. 실전 파이썬 코드: 마스터 데이터를 요약하여 다중 시트 엑셀로 저장하기
아래의 코드는 앞선 포스팅에서 만든 `Master_Dataset.csv`를 불러와, Groupby로 1차 요약을 수행하고, Pivot Table로 2차 교차 분석을 수행한 뒤, 파이썬의 `pd.ExcelWriter`를 사용하여 하나의 엑셀 파일 안에 여러 개의 시트(Sheet)로 나누어 깔끔하게 저장하는 실전 스크립트입니다.
import pandas as pd
# 1. 병합된 마스터 데이터셋 불러오기
# 가상의 컬럼: ['Material_Type', 'Synthesis_Method', 'Temperature', 'Yield', 'Bandgap']
df = pd.read_csv('Master_Dataset.csv')
print(f"불러온 데이터 개수: {len(df)}행")
# 2. Groupby를 이용한 1차원 기초 통계 요약
# 소재 종류(Material_Type)별 밴드갭의 평균과 수율의 최대값을 한 번에 계산
summary_group = df.groupby('Material_Type').agg(
Avg_Bandgap=('Bandgap', 'mean'),
Max_Yield=('Yield', 'max'),
Data_Count=('Material_Type', 'count')
).reset_index() # 인덱스를 깔끔하게 초기화
# 3. Pivot Table을 이용한 2차원 교차 분석
# 행(index): 소재 종류, 열(columns): 합성 방법, 값(values): 평균 밴드갭
summary_pivot = pd.pivot_table(
df,
values='Bandgap',
index='Material_Type',
columns='Synthesis_Method',
aggfunc='mean', # 평균값 계산
fill_value=0 # 데이터가 없는 빈칸은 0으로 채움
)
print("\n[Groupby 요약 결과 미리보기]")
print(summary_group.head())
print("\n[Pivot Table 요약 결과 미리보기]")
print(summary_pivot.head())
# 4. 하나의 엑셀 파일 안에 여러 시트(Sheet)로 나누어 저장하기
output_excel = 'Data_Summary_Report.xlsx'
with pd.ExcelWriter(output_excel) as writer:
# 첫 번째 시트: 원본 데이터 백업
df.to_excel(writer, sheet_name='Raw_Data', index=False)
# 두 번째 시트: Groupby 요약 데이터
summary_group.to_excel(writer, sheet_name='Groupby_Summary', index=False)
# 세 번째 시트: Pivot Table 요약 데이터
summary_pivot.to_excel(writer, sheet_name='Pivot_Summary')
print(f"\n최종 요약 보고서가 '{output_excel}' 파일로 성공적으로 저장되었습니다.")
4. 다중 시트 엑셀 저장의 강력함 (pd.ExcelWriter)
위 코드에서 가장 활용도가 높은 부분은 마지막의 `pd.ExcelWriter` 구문입니다. 여러 분석 결과를 여러 개의 텍스트나 CSV 파일로 쪼개서 저장하면 나중에 폴더 안이 지저분해지고 파일 관리가 힘들어집니다. 하지만 이 기능을 사용하면 파이썬이 엑셀 프로그램을 백그라운드에서 제어하여, '원본 데이터', '1차 요약 데이터', '2차 요약 데이터'를 하나의 `.xlsx` 파일 안에 예쁜 탭(Sheet)으로 나누어 정리해 줍니다. 이렇게 생성된 엑셀 파일을 지도 교수님이나 팀장님께 그대로 이메일로 첨부하면, 그 자체로 완벽하고 프로페셔널한 데이터 분석 보고서가 됩니다.
결론: 원시 데이터에서 '지혜'를 추출하는 기술
데이터가 석유라면, 요약과 통계는 석유를 정제하여 자동차를 움직이게 하는 가솔린을 만드는 과정입니다. 오늘 다룬 Groupby와 Pivot Table은 수만 개의 복잡하고 무의미해 보이는 숫자들 속에서 뚜렷한 경향성과 물리적 의미를 끄집어내는 데이터 과학의 핵심 도구입니다. 엑셀의 제한된 데이터 처리 속도와 수작업의 오류에서 벗어나, 파이썬이 제공하는 압도적인 연산 능력과 자동화의 쾌감을 여러분의 연구와 실무에 직접 도입해 보시기 바랍니다. 몇 시간이 걸리던 데이터 취합 및 요약 보고서 작성이 단 1초의 스크립트 실행으로 끝나는 기적을 맛보게 될 것입니다.