Skip to content

Latest commit

 

History

History
261 lines (196 loc) · 7.59 KB

File metadata and controls

261 lines (196 loc) · 7.59 KB

ESG 건설업체 데이터 대시보드 개발 계획

프로젝트 개요

  • 목표: 주요 건설업체의 ESG(안전/환경) 지표를 시각화하는 Streamlit 대시보드 개발
  • 핵심 기능: 연도별 비교, 업체별 비교, 인터랙티브 차트
  • 대상 업체: Samsung, Hyundai, LG, Google, Tesla
  • 데이터 기간: 2023-2025년

PHASE 1: 프로젝트 셋업 및 데이터 구조 설계

1.1 프로젝트 환경 설정

  • 프로젝트 디렉토리 구조 생성
  • requirements.txt 작성 (Streamlit, Pandas, Altair 등)
  • 가상환경 설정 및 패키지 설치
  • .gitignore 파일 생성

1.2 데이터 구조 설계

  • data.json 스키마 설계
    • 업체별, 연도별 ESG 지표 구조
    • 안전 지표: 사고율(‰), 사망자수, 안전감사 준수율(%), 산재보험금(백만원)
    • 환경 지표: 탄소배출량(tCO₂e), 에너지사용량(kWh/㎡), 재생에너지비율(%), 건설폐기물(ton), 재활용률(%)
  • 샘플 데이터 생성 및 검증

1.3 유틸리티 함수 설계

  • 데이터 로딩 함수 설계
  • 데이터 전처리 함수 설계
  • 캐싱 전략 수립

예상 소요시간: 1-2일


PHASE 2: 메인 페이지 개발

2.1 기본 레이아웃 구성

  • main.py 파일 생성
  • Streamlit 페이지 설정 (제목, 아이콘, 레이아웃)
  • 사이드바 또는 메인 영역에 모드 선택 토글 구현

2.2 모드 선택 기능

  • 연도별 비교 모드 / 업체별 비교 모드 토글 스위치
  • 선택된 모드에 따른 페이지 라우팅 로직
  • 상태 관리 (session_state 활용)

2.3 공통 UI 컴포넌트

  • 헤더 및 네비게이션 구성
  • 프로젝트 소개 섹션
  • 반응형 레이아웃 적용

예상 소요시간: 1일


PHASE 3: 연도별 비교 페이지 개발

3.1 기본 구조 (pages/yearReport.py)

  • 페이지 레이아웃 설정
  • 최신 연도 데이터 테이블 표시
  • 업체 선택 위젯 구현

3.2 데이터 테이블 구현

  • 모든 업체의 최신 연도 데이터 DataFrame 표시
  • 정렬 및 필터링 기능
  • 스타일링 및 포맷팅 (단위, 색상 등)

3.3 연도별 트렌드 시각화

  • 안전 탭 구현
    • 사고율 추이 차트
    • 사망자수 추이 차트
    • 안전감사 준수율 추이 차트
    • 산재보험금 추이 차트
  • 환경 탭 구현
    • 탄소배출량 추이 차트
    • 에너지사용량 추이 차트
    • 재생에너지비율 추이 차트
    • 건설폐기물 및 재활용률 추이 차트

3.4 인터랙티브 기능

  • Altair 차트 툴팁 설정
  • 연도 범위 선택 기능
  • 차트 확대/축소 및 팬 기능

예상 소요시간: 2-3일


PHASE 4: 업체별 비교 페이지 개발

4.1 기본 구조 (pages/companyReport.py)

  • 페이지 레이아웃 설정
  • 최신 연도 데이터 테이블 표시
  • 다중 업체 선택 위젯 구현

4.2 업체 선택 및 데이터 필터링

  • 체크박스 또는 멀티셀렉트를 통한 업체 선택
  • 선택된 업체들의 데이터 필터링 로직
  • 비교 대상 업체 수 제한 (최대 5개 등)

4.3 업체간 비교 시각화

  • 안전 탭 구현
    • 업체별 사고율 비교 바차트
    • 업체별 사망자수 비교 차트
    • 업체별 안전감사 준수율 비교 차트
    • 업체별 산재보험금 비교 차트
  • 환경 탭 구현
    • 업체별 탄소배출량 비교 차트
    • 업체별 에너지사용량 비교 차트
    • 업체별 재생에너지비율 비교 차트
    • 업체별 폐기물 관리 비교 차트

4.4 고급 비교 기능

  • 레이더 차트를 통한 종합 ESG 성과 비교
  • 업체별 순위 표시
  • 업계 평균 대비 성과 표시

예상 소요시간: 2-3일


PHASE 5: 차트 및 시각화 고도화

5.1 Altair 차트 최적화

  • 일관된 색상 팔레트 적용
  • 반응형 차트 크기 설정
  • 애니메이션 효과 추가
  • 접근성 개선 (색맹 고려 등)

5.2 고급 시각화 기능

  • 드릴다운 기능 구현
  • 차트 내 주석 및 설명 추가
  • 데이터 내보내기 기능 (CSV, PDF)
  • 차트 이미지 저장 기능

5.3 대시보드 성능 최적화

  • 데이터 캐싱 최적화
  • 차트 렌더링 성능 개선
  • 메모리 사용량 최적화

예상 소요시간: 1-2일


PHASE 6: UI/UX 개선 및 마무리

6.1 사용자 경험 개선

  • 로딩 스피너 및 프로그레스 바 추가
  • 에러 처리 및 사용자 피드백 개선
  • 도움말 및 가이드 섹션 추가
  • 키보드 단축키 지원

6.2 반응형 디자인

  • 모바일 환경 최적화
  • 태블릿 환경 테스트 및 조정
  • 다양한 화면 크기 대응

6.3 최종 테스트 및 문서화

  • 기능별 테스트 케이스 작성 및 실행
  • 사용자 매뉴얼 작성
  • 코드 주석 및 문서화 완료
  • 배포 가이드 작성

예상 소요시간: 1-2일


PHASE 7: 확장 기능 (선택사항)

7.1 고급 분석 기능

  • 통계적 분석 (상관관계, 회귀분석)
  • 예측 모델링 (시계열 예측)
  • 벤치마킹 기능

7.2 데이터 관리 기능

  • 실시간 데이터 연동 API
  • 데이터 업로드 기능
  • 사용자별 데이터 필터링

7.3 고급 리포팅

  • 자동 리포트 생성
  • 이메일 리포트 발송
  • 대시보드 공유 기능

예상 소요시간: 3-5일 (필요시)


기술 스택 및 도구

핵심 기술

  • Frontend: Streamlit
  • Data Processing: Pandas, NumPy
  • Visualization: Altair
  • Data Storage: JSON (향후 DB 확장 가능)

개발 도구

  • IDE: VSCode 또는 PyCharm
  • Version Control: Git
  • Package Management: pip, requirements.txt
  • Testing: pytest (단위 테스트)

배포 옵션

  • Local: streamlit run main.py
  • Cloud: Streamlit Cloud, Heroku, AWS
  • Container: Docker (선택사항)

일정 및 마일스톤

Phase 기간 주요 산출물
Phase 1 1-2일 프로젝트 셋업, data.json
Phase 2 1일 main.py, 기본 레이아웃
Phase 3 2-3일 yearReport.py, 연도별 비교
Phase 4 2-3일 companyReport.py, 업체별 비교
Phase 5 1-2일 고도화된 차트 및 시각화
Phase 6 1-2일 최종 UI/UX, 테스트
Phase 7 3-5일 확장 기능 (선택)

총 예상 기간: 8-15일


위험 요소 및 대응 방안

기술적 위험

  • Altair 차트 성능 이슈: 데이터 크기 제한, 샘플링 적용
  • Streamlit 멀티페이지 라우팅: session_state 활용한 상태 관리
  • 데이터 구조 변경: 유연한 스키마 설계

일정 위험

  • 요구사항 변경: 단계별 검토 및 승인
  • 기술적 난이도: 프로토타입 우선 개발
  • 테스트 시간 부족: 병렬 개발 및 테스트

품질 위험

  • 사용자 경험: 지속적인 피드백 수집
  • 성능 이슈: 점진적 최적화
  • 확장성: 모듈화된 코드 구조

성공 기준

기능적 요구사항

  • ✅ 연도별/업체별 비교 모드 전환
  • ✅ 안전/환경 지표 시각화
  • ✅ 인터랙티브 차트 및 필터링
  • ✅ 반응형 웹 디자인

비기능적 요구사항

  • ✅ 3초 이내 페이지 로딩
  • ✅ 모바일 환경 지원
  • ✅ 직관적인 사용자 인터페이스
  • ✅ 확장 가능한 코드 구조

이 개발 계획은 프로젝트 진행 상황에 따라 조정될 수 있습니다.