영남권 재난 특보와 대피소 데이터를 기반으로, 사용자 위치에 맞는 대피소 추천, 경로 안내, 재난 패턴 분석을 제공하는 Streamlit 기반 멀티페이지 대시보드입니다.
이 프로젝트는 정적 전처리 데이터와 실시간 재난문자 정보를 함께 활용하여, 사용자가 현재 상황에 맞는 대피소를 확인하고 이동 경로를 탐색할 수 있도록 구성하였습니다. 또한 분석 페이지를 통해 재난 특보의 시계열 패턴, 지역별 특성, 대피소 분포를 함께 살펴볼 수 있습니다.
배포 URL은 추후 추가 예정입니다.
주요 화면 스크린샷 및 데모 GIF도 추후 보완 가능합니다.
본 프로젝트는 재난 발생 시 사용자가 빠르게 대피소를 찾고, 현재 위치 기준으로 이동 경로를 확인하며, 지역별 재난 패턴까지 함께 파악할 수 있도록 설계한 대시보드입니다.
특히 다음 흐름에 초점을 두었습니다.
- 대피 안내 시뮬레이션을 통해 재난 유형별 대피소 추천 제공
- 실시간 대피 안내를 통해 최근 재난문자 기반 안내 흐름 제공
- 데이터 분석 페이지를 통해 재난의 시계열 패턴, 지역별 특성, 대피소 분포 시각화 제공
- 전체 대피소 수, 권역 범위, 최신 특보 시각을 요약해 보여줍니다.
st.navigation기반으로 각 페이지로 이동할 수 있는 시작 화면입니다.
- 브라우저 위치 권한 또는 수동 좌표 입력으로 현재 위치를 지정할 수 있습니다.
- 선택한 재난 유형에 맞는 가까운 대피소 후보를 추천합니다.
- Folium 지도를 통해 현재 위치, 대피소 위치, 이동 경로를 함께 시각화합니다.
- OSRM 도보 경로 조회가 실패할 경우 직선 fallback 경로로 안내를 이어갑니다.
- 최근 특보 이력과 추천 결과 표를 함께 확인할 수 있습니다.
preprocessing_code/crawling.py를 통해 실시간 재난문자를 크롤링합니다.preprocessing_code/mock_disaster_message.py를 사용하여 모의 재난문자를 생성하고 동일한 흐름을 테스트할 수 있습니다.- 지원 권역은
대구,울산,부산,경북,경남입니다. - 감지된 지역을 기준으로 최근 재난문자, 추천 대피소, 경로 지도를 한 화면에서 제공합니다.
- 사이드바에서 재난문자 새로고침, 모의 재난문자 실행, 위치 입력 방식을 제어할 수 있습니다.
- 분석 필터:
지역,재난종류,특보등급 - KPI: 특보 기록 수, 재난종류 수, 지역 수, 최신 특보 시각
- 탭 구성
재난 분포: 특보등급별 재난 분포, 지역별 재난 특성 비교시계열 추이: 월별 재난 분포, 재난종류별 월별 특보 패턴지역 비교: 지역별 주의보 현황, 지역별 경보 현황, 지역별 대피소 분포, 재난종류별 특보 발생 지역권역 대피소 지도: HTML 지도를 임베드하여 전체 권역 대피소를 표시
- 하단
원본 데이터expander에서 필터 결과 테이블을 직접 확인할 수 있습니다.
preprocessing_data/preprocessing/danger_clean.csvpreprocessing_data/preprocessing/final_shelter_dataset.csvpreprocessing_data/preprocessing/earthquake_shelter_clean_2.csvpreprocessing_data/preprocessing/tsunami_shelter_clean_2.csv
preprocessing_code/data/disaster_message_realtime.csvpreprocessing_code/data/Emergency_shelter.db
본 프로젝트는 공공 재난 특보 데이터, 대피소 데이터, 실시간 재난문자 크롤링 결과를 활용합니다.
- 정적 전처리 데이터는 프로젝트 기준 데이터셋을 바탕으로 수동 관리합니다.
- 실시간 재난문자 데이터는 크롤링 실행 또는 페이지 새로고침 시 갱신됩니다.
- 분석 페이지는 SQLite DB를 우선 조회하고, DB가 없을 경우 CSV를 fallback으로 사용합니다.
- 실시간 페이지는 크롤링 결과를 세션 상태에 캐시하며, 갱신 실패 시 직전 결과를 유지하도록 설계되어 있습니다.
사용 데이터의 상세 출처와 갱신 주기는 추후 README에 더 구체적으로 보완할 수 있습니다.
- Python 3.12
- Streamlit
- Pandas / NumPy
- Plotly
- Folium
- Selenium
- streamlit-geolocation
- SQLite
이 저장소는 pyproject.toml과 uv.lock을 함께 사용합니다.
uv sync --devuv를 사용하지 않는 경우에는 Python 3.12 환경에 맞추어 필요한 패키지를 직접 설치해야 합니다.
streamlit run app.py.\.venv\Scripts\python preprocessing_code\mock_disaster_message.py --sido 경북 --sigungu 포항시위 명령은 preprocessing_code/data/disaster_message_realtime.csv를 덮어써서, 실시간 대피 안내 페이지에서 즉시 읽을 수 있는 모의 데이터를 생성합니다.
$env:PREPROCESSING_DATA_DIR="D:\\my-preprocessing-data"또는 .streamlit/secrets.toml에 아래와 같이 설정할 수 있습니다.
preprocessing_data_dir = "D:/my-preprocessing-data"앱은 OSRM 도보 경로 조회를 사용합니다.
$env:OSRM_BASE_URL="http://router.project-osrm.org"- 별도 값을 지정하지 않으면 기본 OSRM 엔드포인트를 사용합니다.
- 경로 조회가 실패할 경우 직선 fallback 경로를 표시합니다.
- 실시간 재난문자 크롤링은 Selenium + Chromium 환경이 필요합니다.
- 배포용 시스템 패키지는
packages.txt에chromium,chromium-driver로 정의되어 있습니다.
.\.venv\Scripts\python -m pytest -q현재 테스트는 아래 범위를 포함합니다.
- HOME 메타 정보 및 KPI 계산
- 대피 안내 시뮬레이션의 경로 계산, OSRM fallback, 지도 생성
- 실시간 재난문자 로딩, 모의 재난문자 생성, 세션 상태 처리
- 분석 페이지 필터 및 차트 builder
- 문서 존재 여부와 주요 모듈의 compile/import 가능 여부
테스트 환경에서는 PROJECT_DASHBOARD_IMPORT_ONLY=1을 사용하여, 페이지 import 시 render_page()가 자동 실행되지 않도록 설정합니다.
.
├─ app.py
├─ pages/
│ ├─ 1_대피_안내_시뮬레이션.py
│ ├─ 2_실시간_대피_안내.py
│ └─ 3_데이터_분석.py
├─ preprocessing_code/
├─ preprocessing_data/
├─ docs/
├─ tests/
├─ .streamlit/
├─ pyproject.toml
├─ packages.txt
└─ uv.lock
- 실시간 재난문자 수집은 Selenium 및 Chromium 실행 환경이 필요합니다.
- 경로 안내는 OSRM 엔드포인트 상태에 영향을 받을 수 있으며, 실패 시 직선 fallback 경로를 사용합니다.
- 분석 및 추천 기능은 영남권 5개 권역을 중심으로 구성되어 있습니다.
- 데이터 품질은 원본 공공데이터 및 전처리 결과에 영향을 받습니다.
- 일부 실시간 기능은 배포 환경보다 로컬 환경에서 더 안정적으로 동작할 수 있습니다.
- 전국 단위 권역 확장
- 실시간 재난문자 자동 갱신 고도화
- 사용자 위치 기반 추천 로직 개선
- 수용인원과 재난 유형을 함께 반영한 대피소 추천 기능 추가
- 모바일 UI 및 지도 인터랙션 개선
- 사용 데이터 출처 및 갱신 주기 문서화 보강
- 대표 스크린샷 및 서비스 데모 자료 추가
- 재난 안전 데이터 공유 플랫폼
- 국민 재난 안전 포털
- 공공데이터 포털
- 개발 및 구현: 김홍대, 남연정, 오승주, 최해목
- 프로젝트 형태: 팀 프로젝트
- 주요 구현 범위: 대피소 추천, 실시간 대피 안내, 데이터 분석 페이지 구성