[파이썬/프로젝트] "내 꿈은 건물주!" 3편: Pandas로 관리비·공과금 자동 계산 및 임대 수익 분석하기

2026. 8. 14. 12:15·Programming/Python

"매달 엑셀로 일일이 계산하던 관리비, 파이썬 한 줄로 끝내자!"

 

안녕하세요! 지난 2편에서는 SQLite를 연동해 입주사 및 호실 데이터를 안전하게 저장하고 관리하는 CRUD 로직을 만들어 보았습니다.

이제 데이터가 데이터베이스에 쌓이기 시작했으니, 이번 3편에서는 파이썬 데이터 분석의 꽃인 Pandas(판다스)를 활용해 보겠습니다.

입주사별 전력·수도 사용량에 따른 관리비 자동 정산부터, 건물 전체의 공실률과 총 임대 수입 리포트까지 단 몇 줄의 코드로 깔끔하게 집계해 봅시다!

 

🛠️ 이번 편에서 구현할 핵심 기능

  • SQLite DB 데이터 ➔ Pandas DataFrame 변환: DB 데이터를 분석하기 쉬운 테이블 구조로 로드
  • 사용량 기반 관리비 자동 계산: 기본 관리비 + (전기/수도 사용량 × 단가) + 정율 공용 관리비 계산
  • 건물 운영 지표 분석: 총 수입, 수납률, 공실률 계산 및 CSV 리포트 수출(Export)

💻 Step 3. Pandas 연동 및 관리비 정산 로직 구현

먼저 필요한 라이브러리를 설치합니다.

pip install pandas

 

이어서 SQLite DB와 연동하여 관리비를 자동으로 산정하고 분석 리포트를 생성하는 파이썬 코드를 작성합니다.

 

import sqlite3
import pandas as pd
from datetime import datetime

class BuildingAnalytics:
    def __init__(self, db_name: str = "building_manager.db"):
        self.db_name = db_name

    def get_dataframe(self) -> pd.DataFrame:
        """SQLite 데이터를 Pandas DataFrame으로 불러오기"""
        with sqlite3.connect(self.db_name) as conn:
            query = "SELECT * FROM tenants"
            df = pd.read_sql_query(query, conn)
        return df

    def calculate_monthly_bills(self, utility_data: list[dict], 
                                electricity_rate: float = 120.0, 
                                water_rate: float = 850.0) -> pd.DataFrame:
        """
        호실별 사용량 데이터를 받아 총 청구 금액(월세 + 관리비) 계산
        
        utility_data 예시:
        [{'room_number': 101, 'electricity_kwh': 250, 'water_m3': 15}, ...]
        """
        df = self.get_dataframe()
        
        # 사용량 데이터 프레임 생성 및 기존 입주 정보와 Merge (INNER JOIN)
        util_df = pd.DataFrame(utility_data)
        merged_df = pd.merge(df, util_df, on='room_number', how='left')

        # 공실인 경우 사용량 0 처리
        merged_df['electricity_kwh'] = merged_df['electricity_kwh'].fillna(0)
        merged_df['water_m3'] = merged_df['water_m3'].fillna(0)

        # 개별 공과금 계산 (사용량 * 단가)
        merged_df['electricity_fee'] = merged_df['electricity_kwh'] * electricity_rate
        merged_df['water_fee'] = merged_df['water_m3'] * water_rate
        
        # 기본 공용 관리비 (평당/면적당 계산 가능하지만, 여기선 기본 50,000원 적용)
        merged_df['base_maintenance'] = merged_df['is_occupied'].apply(lambda x: 50000 if x == 1 else 0)

        # 총 관리비 = 기본 관리비 + 전기료 + 수도료
        merged_df['total_maintenance'] = (
            merged_df['base_maintenance'] + 
            merged_df['electricity_fee'] + 
            merged_df['water_fee']
        )

        # 총 청구액 = 월세 + 총 관리비
        merged_df['total_invoice'] = merged_df['monthly_rent'] * merged_df['is_occupied'] + merged_df['total_maintenance']

        return merged_df

    def generate_summary_report(self, billed_df: pd.DataFrame):
        """건물 전체 요약 리포트 출력"""
        total_rooms = len(billed_df)
        occupied_rooms = billed_df['is_occupied'].sum()
        occupancy_rate = (occupied_rooms / total_rooms) * 100 if total_rooms > 0 else 0

        total_rent = billed_df['monthly_rent'] * billed_df['is_occupied']
        total_rent_income = total_rent.sum()
        total_maintenance_income = billed_df['total_maintenance'].sum()
        grand_total = billed_df['total_invoice'].sum()

        print("==========================================")
        print(f"🏢 건물 월간 정산 요약 ({datetime.now().strftime('%Y-%m')})")
        print("==========================================")
        print(f"• 전체 호실 수   : {total_rooms}개")
        print(f"• 입주 호실 수   : {occupied_rooms}개 (가동률: {occupancy_rate:.1f}%)")
        print(f"• 총 월세 수입   : {total_rent_income:,.0f}원")
        print(f"• 총 관리비 수입 : {total_maintenance_income:,.0f}원")
        print(f"------------------------------------------")
        print(f"💰 이번 달 총 청구액 : {grand_total:,.0f}원")
        print("==========================================")

# 🧪 실행 및 테스트 예시
if __name__ == "__main__":
    analytics = BuildingAnalytics()

    # 각 호실별 이번 달 전기(kWh), 수도(m³) 사용량 샘플 데이터
    monthly_utilities = [
        {'room_number': 101, 'electricity_kwh': 320, 'water_m3': 18},
        {'room_number': 102, 'electricity_kwh': 0, 'water_m3': 0},      # 공실
        {'room_number': 201, 'electricity_kwh': 540, 'water_m3': 32},
    ]

    # 관리비 계산 실행
    billed_result = analytics.calculate_monthly_bills(monthly_utilities)

    # 주요 컬럼만 정돈하여 출력
    display_columns = ['room_number', 'tenant_name', 'monthly_rent', 'total_maintenance', 'total_invoice']
    print("\n[📋 호실별 청구 내역]")
    print(billed_result[display_columns].to_string(index=False))

    # 요약 리포트 출력
    print("\n")
    analytics.generate_summary_report(billed_result)

    # 엑셀/CSV 파일로 내보내기
    billed_result.to_csv("monthly_building_report.csv", index=False, encoding="utf-8-sig")
    print("\n📄 'monthly_building_report.csv' 파일로 리포트가 저장되었습니다!")

 

📈 실행 결과 스크린샷 느낌 살려보기

코드를 실행하면 콘솔에 다음과 같이 깔끔하게 정산된 내역과 요약 리포트가 출력됩니다!

[📋 호실별 청구 내역]
 room_number  tenant_name  monthly_rent  total_maintenance  total_invoice
         101   망고 소프트        850000           103700.0       953700.0
         102         None       1000000                0.0            0.0
         201    코드 카페       1500000           142000.0      1642000.0

==========================================
🏢 건물 월간 정산 요약 (2026-08)
==========================================
• 전체 호실 수   : 3개
• 입주 호실 수   : 2개 (가동률: 66.7%)
• 총 월세 수입   : 2,350,000원
• 총 관리비 수입 : 245,700원
------------------------------------------
💰 이번 달 총 청구액 : 2,595,700원
==========================================

 

Pandas의 to_csv() 메서드 덕분에 버튼 한 번으로 경리/회계용 CSV 파일까지 자동 내보내기가 완료됩니다!

🚀 다음 편 예고 (시리즈 완결)

데이터베이스 저장(SQLite)과 자동 정산 및 리포팅(Pandas)까지 핵심 백엔드 로직이 완성되었습니다!

다음 마지막 4편에서는 파이썬 최고의 프론트엔드 라이브러리인 Streamlit을 활용하여:

  • 한눈에 들어오는 웹 기반 대시보드 화면 구성
  • 클릭만으로 입주사를 추가하고 관리비를 정산하는 실제 사용 가능한 UI 완성

을 진행해 보겠습니다. 기대해 주세요!

궁금한 점이나 추가하고 싶은 로직이 있다면 댓글로 편하게 말씀해 주세요! 💬

'Programming > Python' 카테고리의 다른 글

[파이썬/프로젝트] "내 꿈은 건물주!" 4편: Streamlit으로 10분 만에 웹 대시보드 완성하기 (완결)  (0) 2026.08.14
[파이썬/프로젝트] "내 꿈은 건물주!" 2편: SQLite DB 연동 및 입주사 정보 CRUD 구현하기  (0) 2026.08.14
[파이썬/프로젝트] "내 꿈은 건물주!" Python으로 내 손으로 만드는 빌딩 관리 시스템 구축 가이드  (0) 2026.08.14
[Python] 기초 소스  (0) 2026.05.14
Python Tkinter - GUI 라이브러리  (0) 2025.11.22
'Programming/Python' 카테고리의 다른 글
  • [파이썬/프로젝트] "내 꿈은 건물주!" 4편: Streamlit으로 10분 만에 웹 대시보드 완성하기 (완결)
  • [파이썬/프로젝트] "내 꿈은 건물주!" 2편: SQLite DB 연동 및 입주사 정보 CRUD 구현하기
  • [파이썬/프로젝트] "내 꿈은 건물주!" Python으로 내 손으로 만드는 빌딩 관리 시스템 구축 가이드
  • [Python] 기초 소스
레이조(RayCho)
레이조(RayCho)
개발자 레이조(RayCho)의 블로그입니다. 똑똑하게 배우고 기록하는 공간
  • 레이조(RayCho)
    레이(Ray)의 개발이야기
    레이조(RayCho)
  • 전체
    오늘
    어제
    • 분류 전체보기 (101) N
      • Programming (101) N
        • Python (9)
        • Flutter (4)
        • Delphi (25)
        • Java,Spring Boot (2) N
        • Lazarus (2)
        • C#.NET (20)
        • ASP.NET (5)
        • Database (8)
        • Game Dev (6)
        • Rust (3)
        • PHP (3)
        • Web (6)
        • ETC (8)
  • 블로그 메뉴

    • 홈
    • Introduce
    • 태그
  • 링크

    • Naver Blog
    • Diary Blog
  • 공지사항

  • 인기 글

  • 태그

    objectpascal
    PSP
    WPF
    C#
    문법
    ASP.NET
    기초
    소스코드
    Flutter
    delphi
    Python
    프로그래밍
    Web
    델파이
    VCL
    프로젝트
    개발환경
    mssql
    iis
    csharp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
레이조(RayCho)
[파이썬/프로젝트] "내 꿈은 건물주!" 3편: Pandas로 관리비·공과금 자동 계산 및 임대 수익 분석하기
상단으로

티스토리툴바