지역 및 도시별 판매 데이터를 계층적으로 요약하는 방법을 소개합니다. 여러 단계의 중첩된 그룹화와 통계 계산을 통해 종합적인 보고서를 생성할 수 있습니다.
데이터 생성
import pandas as pd
import numpy as np
regions = ['North', 'East', 'South', 'Central']
products = ['TV', 'Refrigerator', 'Washer', 'AC']
city_mapping = {
'North': ['Seoul', 'Incheon', 'Busan'],
'East': ['Daegu', 'Ulsan', 'Gwangju'],
'South': ['Suwon', 'Changwon', 'Cheonan'],
'Central': ['Daejeon', 'Jeonju', 'Cheongju']
}
def create_dataset(entries):
records = []
for _ in range(entries):
area = np.random.choice(regions)
location = np.random.choice(city_mapping[area])
item = np.random.choice(products)
revenue = round(np.random.uniform(1000, 5000), 2)
units = np.random.randint(1, 100)
records.append([area, location, item, revenue, units])
return records
sales_df = pd.DataFrame(
create_dataset(1000),
columns=['Area', 'City', 'Product', 'Revenue', 'Units']
)
단일 계층 요약
지역별 총계 계산:
area_summary = sales_df.groupby('Area').sum(numeric_only=True)
total_row = pd.DataFrame(area_summary.sum()).T
total_row.index = ['Total']
area_summary = pd.concat([area_summary, total_row])
제품별 요약:
product_table = pd.pivot_table(
sales_df,
index='Product',
values=['Revenue', 'Units'],
aggfunc='sum',
margins=True,
margins_name='Grand Total'
)
이중 계층 요약
def regional_summary(group):
return pd.pivot_table(
group,
index='City',
values=['Revenue', 'Units'],
aggfunc=np.sum,
margins=True,
margins_name=f"{group['Area'].iloc[0]} Total"
)
result = sales_df.groupby('Area').apply(regional_summary)
삼중 계층 요약
def multi_level_summary(data, metrics, hierarchy):
base_table = pd.pivot_table(
data,
values=metrics,
index=hierarchy,
aggfunc='sum',
margins=True,
margins_name='Overall'
).reset_index()
grouped = base_table.groupby(hierarchy[0])
processed = grouped.apply(
lambda subset: pd.pivot_table(
subset,
index=hierarchy[1:],
values=metrics,
aggfunc='sum',
margins=True,
margins_name=f"{subset[hierarchy[0]].iloc[0]} Subtotal"
)
)
return processed[~processed.index.get_level_values(-1).str.contains('Subtotal')]
multi_level_summary(
sales_df,
['Revenue', 'Units'],
['Area', 'City', 'Product']
).sample(10)
이 기법은 pivot_table과 groupby를 조합하여 복잡한 계층 구조의 데이터 요약을 자동화합니다. 지역-도시-상품의 삼중 구조뿐 아니라 더 많은 계층으로 확장 적용 가능합니다.