12,584건의 거래를 한눈에, 재무 Dashboard 시각화
41단계에서 추출해 낸 고위험 거래와 수많은 엑셀 로우(Row) 데이터를 회계사가 일일이 읽을 수는 없습니다.
이번 단계에서는 Matplotlib, Plotly를 이용해 데이터를 인터랙티브한 그래프로 변환하고, Streamlit을 통해 "기간, 거래처, 계정과목"을 클릭 한 번으로 필터링하며 AI 요약 브리핑까지 한 화면에 보여주는 '경영진/회계사용 대시보드'를 구축합니다.
데이터를 "의사결정 정보"로 바꾸는 과정
1만 건이 넘는 거래 데이터 엑셀 파일을 회계사에게 던져주는 것은 자동화가 아닙니다.
데이터베이스 안의 날것(Raw Data)을 매출액 감소치, 비용 증가치, 이상거래 건수 등 직관적인 화면으로 뿌려주어야 비로소 진정한 가치가 발생합니다.
Matplotlib: 데이터 시각화의 기본
가장 기본적이고 널리 쓰이는 시각화 라이브러리인 matplotlib.pyplot을 이용해 정적(Static)인 그래프를 그립니다.
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`) 등도 그릴 수 있지만, 보고서에 첨부하기 위한 '이미지' 형태라는 한계가 있습니다.
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()
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)
회계사에게 유용한 핵심 재무 KPI 도출
단순한 '매출합산금액'보다 실무에서 훨씬 중요하게 보는 **가공 지표(KPI)**들을 Pandas로 연산하여 띄워줍니다.
- 영업이익률:
(영업이익 / 총매출) * 100 - 비용률:
(총비용 / 총매출) * 100 - 특정 거래처 집중도: 상위 1개 거래처의 매출이 전체 매출에서 차지하는 비중 (리스크 관리 목적)
- 전년 동기 대비 증감률(YoY): 작년 8월 매출 vs 올해 8월 매출
드롭다운 필터 적용하기 (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)
AI 분석 결과를 대시보드에 연동하기
41단계에서 만든 "위험거래 AI 자연어 브리핑" 결과를 대시보드의 최상단(혹은 사이드바)에 배치하여 회계사가 가장 먼저 조치해야 할 행동(Call to action)을 제안하게 만듭니다.
💡 8월 재무 및 리스크 요약
8월 매출은 전월 대비 18.4% 감소한 반면, 전체 비용은 23.7% 증가하여 영업이익률이 크게 하락했습니다.
특히 '광고선전비'의 지출 증가폭이 가장 크며, 41단계 알고리즘에 의해 총 23건의 고위험 중복/고액 거래가 탐지되었습니다. 최하단의 [검토 대상 테이블]을 확인하여 우선적으로 증빙을 대조하시기 바랍니다.
43단계 예고: 실제 상용화를 위한 Web + DB 아키텍처
이제 우리는 완벽한 데이터 분석과 대시보드 화면까지 갖추었습니다.
다음 43단계에서는 지금까지 엑셀(`xlsx`) 파일과 로컬 스크립트로 동작하던 이 강력한 프로그램들을 FastAPI/Flask 기반의 백엔드와 MariaDB(관계형 DB), 그리고 브라우저 기반의 로그인 시스템으로 모두 합쳐내어 '실제 다수 거래처를 관리할 수 있는 SaaS 형태의 시스템'으로 진화시키는 대공사를 진행합니다.