Skip to content

ChoiInYeol/pharmacy-location-optimization

Repository files navigation

pharmacy-location-optimization

서울시 취약시간대 의료 접근성 문제를 완화하기 위해 공공심야약국 후보 입지를 분석한 프로젝트입니다. 2022 서울시 빅데이터 캠퍼스 멘토링 3기에서 수행했고, 공간 데이터 전처리, 의료 취약도 가중치 산정, MCLP(Maximal Covering Location Problem) 기반 입지 최적화, 보조적인 머신러닝 분석 결과를 함께 보관합니다.

Project Snapshot

  • 문제 정의: 심야 시간대 의약품 접근이 어려운 서울 지역에서 공공심야약국 후보 입지를 찾기
  • 핵심 방법
    • 주소/좌표 정제 및 공간 전처리
    • 생활인구·취약계층·의료인력·약국 소비 데이터 결합
    • 의료가중지수 산정
    • ortools + spaghetti 기반 MCLP 모델링
    • XGBoost 기반 보조 피처 중요도 확인
  • 주요 산출물
    • report/final-report.pdf: 최종 보고서
    • figures/: 분석 결과 그림 모음
    • PreprocessData/: 전처리 완료 데이터
    • 서울/제주 실험 노트북 일체

Repository Layout

.
├── notebooks/
│   ├── 1.Seoul_Preprocess.ipynb      # 서울 심야약국/일반약국/편의점 전처리
│   ├── 2.Seoul_Juso_KakaoAPI.ipynb   # 주소 → 좌표 변환 실험
│   ├── 3.Seoul_MCLP.ipynb            # 서울 MCLP 핵심 실험
│   ├── 4.Seoul_MCLP 2.ipynb          # 추가 MCLP 실험
│   ├── 5.MLCP EXAMPLE.ipynb          # MCLP 예시 및 변형 실험
│   ├── 6.유동인구데이터전처리.ipynb   # 생활인구 전처리
│   ├── 7.Seoul_ML.ipynb              # XGBoost 기반 보조 분석
│   └── 9. 서울시빅캠전처리.ipynb      # 의료가중지수 산정 및 시각화
├── artifacts/                        # 전처리 중간 산출물(B049/B055/가중치 등)
├── PreprocessData/                   # 전처리 결과 CSV
├── DataSet/                          # 원본/공간 데이터 일부
├── figures/                          # README용 결과 이미지 및 시각화 산출물
├── report/
│   └── final-report.pdf              # 최종 제출 보고서
├── references/                       # 정책/연구 참고 문헌 PDF
└── 제주시 코드 (참고)/               # 제주도 확장 실험 및 참고 코드

Recommended Reading Order

1. 데이터 정리

  • notebooks/1.Seoul_Preprocess.ipynb
  • notebooks/2.Seoul_Juso_KakaoAPI.ipynb
  • notebooks/6.유동인구데이터전처리.ipynb
  • 서울 약국/편의점/행정구역 데이터를 좌표계까지 맞춰서 정리합니다.

2. 의료가중지수 구성

  • notebooks/9. 서울시빅캠전처리.ipynb
  • 고령자, 장애, 기초생활, 약국 소비 등 취약도 지표를 합쳐 행정동 단위 가중치를 만듭니다.

3. 입지 최적화

  • notebooks/3.Seoul_MCLP.ipynb
  • notebooks/4.Seoul_MCLP 2.ipynb
  • notebooks/5.MLCP EXAMPLE.ipynb
  • 도로 네트워크와 후보 시설을 연결해 MCLP로 커버리지를 최대화합니다.

4. 보조 분석

  • notebooks/7.Seoul_ML.ipynb
  • 전처리된 최종 데이터에서 XGBoost로 중요 피처를 확인해 취약시간 의료 수요 특성을 보조적으로 해석합니다.

Result Figures

의료가중지수 지도

의료가중지수 지도

지표 상관관계

상관관계 히트맵

분포/모형 산출 예시

분포 확인 모형 산출 예시
분포 히스토그램 모형 산출

Data Notes

이 프로젝트는 노트북 중심으로 진행되어 파일 경로가 완전히 일관적이지 않습니다. 정리 작업으로 서울 노트북은 notebooks/, 중간 산출물은 artifacts/로 이동했습니다.

  • PreprocessData/의 CSV는 여러 노트북에서 공통 입력으로 사용됩니다.
  • artifacts/에는 B049.txt, B055.txt, 가중치.csv, 가중치2.csv 같은 전처리 중간 산출물을 모아 두었습니다.
  • 일부 노트북은 여전히 저장소에 포함되지 않은 원본 공공데이터를 전제로 합니다.
  • 제주 참고 노트북은 기존 구조를 유지해 별도 정리 대상으로 남겨 두었습니다.

Environment

기본 패키지:

python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
pip install -r requirements2.txt

주요 라이브러리:

  • pandas, numpy, scipy
  • geopandas, shapely, fiona, pyproj, rtree
  • libpysal, spaghetti, ortools
  • matplotlib, seaborn
  • xgboost, tensorflow

Kakao Address API Helper

제주시 코드 (참고)/api.py는 주소를 좌표로 바꾸는 간단한 헬퍼입니다. 이제 하드코딩된 키 대신 환경변수를 사용합니다.

$env:KAKAO_REST_API_KEY="your-rest-api-key"
python "제주시 코드 (참고)/api.py"

Final Report and References

External Data and Policy Links

Contributors

  • 김수빈 — 경희대학교 소프트웨어융합학과
  • 박재훈 — 경희대학교 소프트웨어융합학과
  • 정다영 — 경희대학교 소프트웨어융합학과
  • 최인열 — 경희대학교 소프트웨어융합학과

Notes

이 저장소는 패키지형 애플리케이션이 아니라 대회 분석 아카이브에 가깝습니다. 재현성보다 당시 실험 과정과 결과 보존에 무게가 있으므로, 노트북 실행 전 파일 경로와 입력 데이터 존재 여부를 먼저 확인하는 편이 좋습니다.

Releases

No releases published

Packages

 
 
 

Contributors