Phase 7 · 회계 분석 및 시각화

12,584건의 거래를 한눈에, 재무 Dashboard 시각화

41단계에서 추출해 낸 고위험 거래와 수많은 엑셀 로우(Row) 데이터를 회계사가 일일이 읽을 수는 없습니다.
이번 단계에서는 Matplotlib, Plotly를 이용해 데이터를 인터랙티브한 그래프로 변환하고, Streamlit을 통해 "기간, 거래처, 계정과목"을 클릭 한 번으로 필터링하며 AI 요약 브리핑까지 한 화면에 보여주는 '경영진/회계사용 대시보드'를 구축합니다.

예상 학습 시간 : 420분
난이도 : ★★★★☆
사전 단계 : 회계 이상/부정거래 자동 탐지 (Step 41)
다음 단계 : 43단계 - DB + 웹 기반 회계 자동화 시스템 (예정)
01

데이터를 "의사결정 정보"로 바꾸는 과정

1만 건이 넘는 거래 데이터 엑셀 파일을 회계사에게 던져주는 것은 자동화가 아닙니다.
데이터베이스 안의 날것(Raw Data)을 매출액 감소치, 비용 증가치, 이상거래 건수 등 직관적인 화면으로 뿌려주어야 비로소 진정한 가치가 발생합니다.

┌────────────────────────────────────────────────────┐ │ 2026년 8월 재무 Dashboard │ ├────────────┬────────────┬────────────┬─────────────┤ │ 총매출 │ 총비용 │ 영업이익 │ 거래건수 │ │ 3.2억원 │ 2.4억원 │ 0.8억원 │ 12,584건 │ ├────────────┴────────────┴────────────┴─────────────┤ │ │ │ 월별 매출 / 비용 추이 │ │ 📈 │ ├──────────────────────────┬─────────────────────────┤ │ 계정과목별 비용 │ 주요 검토 거래(AI) │ │ 📊 │ ⚠ 15건 │ └──────────────────────────┴─────────────────────────┘
02

Matplotlib: 데이터 시각화의 기본

가장 기본적이고 널리 쓰이는 시각화 라이브러리인 matplotlib.pyplot을 이용해 정적(Static)인 그래프를 그립니다.

🐍 python
import matplotlib.pyplot as plt

# 월별 매출과 비용 추이 비교
plt.plot(monthly["month"], monthly["sales"], label="매출")
plt.plot(monthly["month"], monthly["cost"], label="비용")

plt.title("월별 매출 및 비용 추이")
plt.legend()
plt.show()

막대 그래프(`plt.bar`), 파이 차트(`plt.pie`) 등도 그릴 수 있지만, 보고서에 첨부하기 위한 '이미지' 형태라는 한계가 있습니다.

03

Plotly: 마우스를 올리면 반응하는 인터랙티브 차트

회계사/경영진에게 제공할 현대적인 대시보드라면 그래프를 마우스로 확대(Zoom)하거나 마우스를 올렸을 때 정확한 금액(Hover Tooltip)이 나와야 합니다. 이를 위해 Plotly Express를 활용합니다.

import plotly.express as px

# 거래처별 매출을 막대그래프로 (마우스 Hover 시 상세 수치 표시됨)
fig = px.bar(
    customer_df, 
    x="customer_name", 
    y="amount", 
    title="Top 10 거래처별 매출 현황"
)
fig.show()
04

Streamlit: Python만으로 웹 대시보드 뚝딱 만들기

HTML이나 JavaScript를 전혀 모르더라도 파이썬 코드만으로 강력한 웹 기반 데이터 앱을 만들어주는 Streamlit 프레임워크를 사용합니다.

# app.py 로 저장 후 터미널에서 `streamlit run app.py` 실행
import streamlit as st

st.title("AI 재무 분석 대시보드")

# 1. 3등분 컬럼을 만들고 핵심 지표(KPI) 카드를 배치
col1, col2, col3 = st.columns(3)
col1.metric("총매출", f"{total_sales:,}", "12% 증가")
col2.metric("총비용", f"{total_cost:,}", "-3% 감소")
col3.metric("고위험 검토 대상", f"{high_risk_count}")

# 2. 위에서 만든 Plotly 차트를 화면에 삽입
st.plotly_chart(fig, use_container_width=True)
05

회계사에게 유용한 핵심 재무 KPI 도출

단순한 '매출합산금액'보다 실무에서 훨씬 중요하게 보는 **가공 지표(KPI)**들을 Pandas로 연산하여 띄워줍니다.

  • 영업이익률: (영업이익 / 총매출) * 100
  • 비용률: (총비용 / 총매출) * 100
  • 특정 거래처 집중도: 상위 1개 거래처의 매출이 전체 매출에서 차지하는 비중 (리스크 관리 목적)
  • 전년 동기 대비 증감률(YoY): 작년 8월 매출 vs 올해 8월 매출
06

드롭다운 필터 적용하기 (Selectbox & Date Input)

사용자가 특정 기간이나, 특정 거래처만 좁혀서(Drill-down) 볼 수 있도록 대화형 인터페이스를 연결합니다.

# 1. UI: 거래처 드롭다운 생성
selected_customer = st.selectbox("거래처를 선택하세요", ["전체"] + customer_list)

# 2. 로직: 선택에 따라 DataFrame 필터링
if selected_customer != "전체":
    filtered_df = df[df["customer"] == selected_customer]
else:
    filtered_df = df

# 3. 필터링된 데이터로 화면 하단 표(Table) 업데이트
st.dataframe(filtered_df)
07

AI 분석 결과를 대시보드에 연동하기

41단계에서 만든 "위험거래 AI 자연어 브리핑" 결과를 대시보드의 최상단(혹은 사이드바)에 배치하여 회계사가 가장 먼저 조치해야 할 행동(Call to action)을 제안하게 만듭니다.

Dashboard AI 브리핑 영역

💡 8월 재무 및 리스크 요약
8월 매출은 전월 대비 18.4% 감소한 반면, 전체 비용은 23.7% 증가하여 영업이익률이 크게 하락했습니다.
특히 '광고선전비'의 지출 증가폭이 가장 크며, 41단계 알고리즘에 의해 총 23건의 고위험 중복/고액 거래가 탐지되었습니다. 최하단의 [검토 대상 테이블]을 확인하여 우선적으로 증빙을 대조하시기 바랍니다.

08

43단계 예고: 실제 상용화를 위한 Web + DB 아키텍처

이제 우리는 완벽한 데이터 분석과 대시보드 화면까지 갖추었습니다.

다음 43단계에서는 지금까지 엑셀(`xlsx`) 파일과 로컬 스크립트로 동작하던 이 강력한 프로그램들을 FastAPI/Flask 기반의 백엔드와 MariaDB(관계형 DB), 그리고 브라우저 기반의 로그인 시스템으로 모두 합쳐내어 '실제 다수 거래처를 관리할 수 있는 SaaS 형태의 시스템'으로 진화시키는 대공사를 진행합니다.

Step 41 : 이상/부정거래 탐지 Phase 7 공사중