Seoul (Commercial Real-Estate) Market Analysis Pipeline
1. 서울 상권 분석 파이프라인 구축
[가맹점 사업체 위치 데이터 기반]
기획 : 조성빈 (개인프로젝트)
일시 : 2017.11.30 ~ 2018.01.10
배포 : kadensungbincho.com
목적 : 서울 가맹점 사업체 위치로
클러스터링한 상권 간
유사도 및 차이점을 통해
추천시스템을 제공하는 서비스를
배포하고자 함
SMA
4. SMA 분석 및 설계
https://www.slideshare.net/deview/236-67609108
데이터 수집 전처리 데이터 저장 모델링 시각화 서비스 배포
정부 가맹사업체 리스트
파이썬 – 네이버 API
리퀘스트
카테고리 구분, 태그,
좌표계 전처리
AWS EC2 상의
몽고디비에 저장
밀도 기반의
HDBSCAN을 통해
X, Y 위치 기반 클러스터링
Folium, Shapely를 통한
매핑
AWS EC2 상
Nginx, Flask를 통해
웹서비스 배포,
로그인 유저 관리용 SQLite
5. SMA 3.1 데이터 가공
https://github.com/kadensungbincho/individual_project_20171130/tree/master/packaged_project
app.py : 메인 스크립트 파일.
config.py :
가맹점 리스트 csv 파일 루트,
DB 및 API 아이디 & 패스워드,
지도 작성 상세 등
query.py :
csv 파일 루트 입력 시
네이버에 요청할 쿼리 생성
api_requests.py :
API 아이디, 패스워드를 통해
query.py에서 생성한 쿼리
리퀘스트
preprocess.py :
Json으로 받은 리스폰스 안의
카테고리 상세 구분, 잔여
태그 제거, 카텍 좌표 -> 구글
좌표 변환
coordinate.py :
좌표 변환 함수
mongodb.py :
데이터 몽고디비 입출력 담당
clustering.py :
HBDSCAN 클러스터링 및
관련 로깅 핸들링
mapping.py :
Shapely, Folium를 통한
포인트 -> 폴리곤 변환,
폴리곤 매핑 및 팝업 그래프
추가
flask_app.py : Flask 메인
스크립트 파일.
models.py :
유저, 포스트 관리용 모델
forms.py :
가입, 로그인, 포스트용 폼
6. SMA 3.2 모델링
1. 분류 문제에서는 분류 라벨이 있는 경우와 없는 경우가
있음
2. 상권 분류의 경우 라벨이 없는 문제이며 클러스터링
지표로는 Centroid 기반 모델(Kmeans) 지표를 차용할 수
있으나 현실을 잘 반영한다고 보기 어려움
3. 지리 데이터에 많이 사용되며,
대량의 데이터에 적용 가능하고,
주변부 데이터를 제외한다는 단점은
비-상업화 지역으로 나타내기로 함
https://en.wikipedia.org/wiki/Cluster_analysis
http://scikit-learn.org/stable/modules/clustering.html
원본 : 정규분포를 띄는 샘플.
KMeans : 중심점을 기준으로 총
거리를 가장 최소화하는 알고리즘,
파라미터로 최종 분류 군집 개수를
입력해야 함.
HDBScan : DBScan에
계층(Hierarchy)적 접근법을 더한
알고리즘, 밀도가 급격히 떨어지는
지점을 제외시키며 파라미터로
군집의 최소 요소 개수, 최종 군집의
최소 개수 등을 입력해야 함.
7. SMA 3.3 서비스 구현 및 배포
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04
https://en.wikipedia.org/wiki/Nginx
http://oliverelliott.org/article/computing/notes_labsite/
https://my.freenom.com/
1. 최종적으로 AWS EC2에서 스케쥴러를 통해 자동으로
업데이트 되도록 하려고 함 (현재 매핑전까지 로컬에서
진행)
2. 기본적인 Nginx, Flask, SQLite, Bootstrap 조합을 EC2에
올려 서비스를 운영하고 있음
3. 로그인과 포스트 기능과 관련해 추가적으로 로깅을
찍어 추후 웹 서비스를 분석하여 개선할 예정임
4. 도메인은 생활코딩에서 알게 된 Freenom을
사용하여 구입
8. SMA 3.3 서비스 구현 및 배포
https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04
https://en.wikipedia.org/wiki/Nginx
http://oliverelliott.org/article/computing/notes_labsite/
https://my.freenom.com/
상권별 그래프 : 상권 군집별로
업종별 가맹점 개수를 나타냄.
브랜드별로 바로 변경 가능.
상권 종류별 지도: 상권 크기, 밀도,
역세권 여부로 지도를 볼 수 있음.
AJAX 방식이 아니라 매핑한 지도
HTML을 요청하는 형식이라서 매우
느림.
상권 유사도 및 추천 : 상권의 업종
개수를 벡터화 하여 유사도 비교까지
구현. 포인트 클릭 시 추천시스템을
추가적으로 구현해야 함.
레이어 컨트롤: 레이어 컨트롤을 통해
상권 종류별 지도를 모두 한 곳에
표기할 수 있으나 HTML 하나로
구현되어 매우 느려서 하지 않음.
9. SMA 4 추가사항
http://docs.python-guide.org/en/latest/
1. 프론트, 백엔드를 계속 공부하면서 기존의 단점에
더해 추가적인 단점이 보임
2. 수집한 데이터로 최종적인 인사이트를 발견한다는
점에서 추천시스템은 반드시 추가하여 서비스의
가치를 만들어야 할 것으로 판단됨
3. 데이터양이 매우 적으나 대량의 데이터 케이스를
고려하여 스케일업하는 것도 좋은 방향인 것 같음
4. 파이썬 패키지 형식 또는 문서화 (SphinX)의 기준을
검토할 필요가 있음
10. Seoul Market Analysis
Deploy : http://kadensungbincho.com/
Github : https://github.com/kadensungbincho
Mail : kadensungbincho@gmail.com