분류별 누적금액 시각화하기
시각화에는 다양한 유형이 있기 때문에 정보의 성격과 목적에 따라 정보 전달의 효과가 극대화되는 것을 잘 선택해야 합니다. 예를 들어 서로 다른 항목을 비교하거나 데이터의 추세를 부여주고 싶다면 바 차트(bar char)를, 분포나 상관관계를 보여 쥬고 싶다면 산점도(scatter plot)가 효과적입니다.
전체 카드 지출 내역 중 분류별 누적 금액의 구성과 비율을 시각화하기 위해 데이터프레임을 파이 차트(pie chart)로 표현해 보겠습니다.
matplotlib 패키지와 seeborn 패키지를 활용하여 파이 차트를 그려 봅니다.
데이터프레임 분할
파이 차트는 너무 많은 항목을 시각화하기에는 적절하지 않으므로 차트에 표시할 데이터 개수를 적절히 조절하는 것이 중요합니다.
비주얼 스튜디오 코드에서 새로운 파일을 생성하고, 파일명을 'step_4_1.py'로 변경합니다. 다음 코드를 입력한 뒤, 대화형 창에서 실행하면 df_tail에 저장된 데이터프레임이 화면에 출력됩니다.
import pandas as pd
from step_3_2 import OUT_3_2 # 이전에 작성한 모듈을 불러옵니다.
N = 4
df_raw = pd.read_excel(OUT_3_2)
df_head, df_trail = df_raw.iloc[:N], df_raw.iloc[N:] # 6
df_trail

06 iloc 명령어를 사용하여 데이터프레임을 슬라이싱합니다. iloc[:N]은 0부터 N-1 행까지, iloc[N:]은 N부터 마지막행까지 슬라이싱합니다.
열별 합계 계산
이번에는 df_trail에 저장된 데이터의 열별 합계를 계산하여 '기타'로 만들어 봅시다. 이전 코드에 다음 코드를 이어서 입력한 뒤, 대화형 창에서 실행하면 '기타' 분류로 집계된 데이터프레임이 화면에 출력됩니다.
import pandas as pd
from step_3_2 import OUT_3_2 # 이전에 작성한 모듈을 불러옵니다.
N = 4
df_raw = pd.read_excel(OUT_3_2)
df_head, df_tail = df_raw.iloc[:N], df_raw.iloc[N:]
df_tail
df_sum = df_tail.drop(columns=["분류"]).sum().to_frame().transpose() # 9
df_sum["분류"] = "기타" # 10
df_sum
09 함수 drop()로 '분류' 열을 제거하고 함수 sum()로 열별 합게를 구합니다. 그리고 이를 함수 to_frame()로 데이터프레임으로 변환한 후, 함수 transpose()를 사용해 행과 열을 바꿉니다.
10 '기타' 문자열을 분류 열에 추가합니다.
데이터프레임 연결
이제 파이 차트를 그리기 위한 데이터 전처리 과정의 마지막 단계입니다. df_head와 df_sum를 연결하여 하나의 데이터프레임으로 만듭니다. pandas 패키지의 함수 concat()를 사용하면 간단히 해결할 수 있습니다.
코드를 대화형 창에서 실행하면 '기타' 분류를 포함한 모든 내용이 의도대로 잘 출력되는 것을 확인할 수 있습니다.
import pandas as pd
from step_3_2 import OUT_3_2 # 이전에 작성한 모듈을 불러옵니다.
N = 4
df_raw = pd.read_excel(OUT_3_2)
df_head, df_tail = df_raw.iloc[:N], df_raw.iloc[N:]
df_tail
df_sum = df_tail.drop(columns=["분류"]).sum().to_frame().transpose() # 9
df_sum["분류"] = "기타" # 10
df_sum
df_final = pd.concat([df_head, df_sum], ignore_index=True) # 12
df_final

12 함수 concat()를 사용하여 데이터프레임 df_head와 df_sum을 연결합니다. ignore_index 매개변수에 True를 전달하여 데이터프레임의 인덱스를 0부터 N-1까지 다시 생성합니다.
파이 차트
matplotlib 패키지의 함수 pie()를 사용하여 파이 차트를 그려 보겠습니다. 소스 코드 'step_4_1.py'에 이어서 다음 코드를 입력하고, 대화형 창에서 실행하면 파이 차트가 화면에 출력됩니다. 'output'폴더에도 'step_4_1.png' 파일이 생성된 것을 볼 수 있습니다.
import pandas as pd
from step_3_2 import OUT_3_2 # 이전에 작성한 모듈을 불러옵니다.
N = 4
df_raw = pd.read_excel(OUT_3_2)
df_head, df_tail = df_raw.iloc[:N], df_raw.iloc[N:]
df_tail
df_sum = df_tail.drop(columns=["분류"]).sum().to_frame().transpose() # 9
df_sum["분류"] = "기타" # 10
df_sum
df_final = pd.concat([df_head, df_sum], ignore_index=True) # 12
df_final
from pathlib import Path
import matplotlib.pyplot as plt
from step_1 import OUT_DIR
values = df_final["누적금액"]
fig, ax = plt.subplots(figsize=(16, 9), dpi=100) # 21
ax.pie( # 22
values, # 23
textprops=dict(color="black", size=20), # 폰트 설정 # 24
startangle=90, # 차트 각도 설정 # 25
autopct="%.1f%%", # 비율 출력 형식 지정 # 26
) # 27
fig.savefig(OUT_DIR / f"{Path(__file__).stem}.png", bbox_inches="tight") # 28

22~27 Axes 객체의 함수 pie()를 사용하여 파이 차트를 그립니다. 매개변수 autopct에 '%.1f%%'를 전달하여 개별 데이터의 비율을 소수점 1자리까지 '%'를 포함하여 출력합니다.
28 Figure 객체의 함수 savafig()를 사용하여 이미지를 파일로 저장합니다. 매개변수 bbox_inches에 'tight'를 전달하여 파이 차트를 제외한 나머지 빈 영역을 제거합니다.
소스 코드 정리
from pathlib import Path
import matplotlib.pyplot as plt
import pandas as pd
from step_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_3_2 import OUT_3_2
def load_data(n: int = 4) -> pd.DataFrame:
df_raw = pd.read_excel(OUT_3_2)
df_head, df_tail = df_raw.iloc[:n], df_raw.iloc[n:]
df_sum = df_tail.drop(columns=["분류"]).sum().to_fame().transpose() # 9
df_sum["분류"] = "기타"
return pd.concat([df_head, df_sum], ignore_index=True)
if __name__ == "__main__":
df_raw = load_data()
values = df_raw["누적금액"]
fig, ax = plt.subplots(figsize=(16, 9), dpi=100)
ax.pie(
values,
textprops=dict(color="black", size=20), # 폰트 설정
startangle=90, # 차트 각도 설정
autopct="%.1f%%", # 비율 출력 형식 지정
)
fig.savefig(OUT_DIR / f"{Path(__file__).stem}.png", bbox_inches="tight")'프로그래밍 언어 > Python' 카테고리의 다른 글
| 이미지 불러오기 (0) | 2025.11.14 |
|---|---|
| 제목, 레이블, 범례 추가하기 (0) | 2025.11.11 |
| 분류별 누적 지출 합계 구하기 (0) | 2025.11.05 |
| 집계 기준 추가하기 (0) | 2025.11.02 |
| 분류별 지출 합계 구하기 (0) | 2025.10.30 |