project8. 특정 주소에 대한 지리 정보 분석 후, 지도에 시각화
1. 목표 설정 및 핵심 개념
목표 설정
- 지오 데이터를 이용하여 주소 위치를 맵에 표시
핵심 개념
- 지오 데이터: 위도, 경도의 GPS 좌표와 같은 지리 정보
GPS 정보는 구글맵, Geocoder-Xr(오픈 SW)를 사용
- 지리 정보 시각화 라이브러리
포리움(folium) 라이브러리
2. 데이터 수집
주소 데이터 수집
- 크롤링으로 수집한 CoffeeBean.csv
행정구역 주소 체계 데이터
- 주소를 정제할 기준이 되는 데이터 필요
- 국가통계포털 사이트 (https://kosis.kr/index/index.do)
3. 데이터 준비 및 탐색
다운로드한 엑셀 파일 확인
- 행정 구역 1레벨(시), 2레벨(군/구) 분리 작업: 엑셀에서 정리
분석할 커피 매장 주소 데이터 준비
(1) 주소 데이터 확인
'서울, 서울시, 서울특별시': 행정구역 주소 체계에 맞지 않음
(2) 행정 구역 주소 체계에 맞게 정리하기 위해 데이터 쪼개기
import pandas as pd
cbData = pd.read_csv('CoffeeBean.csv', encoding='CP949', index_col=0, header=0, engine='python')
addr = []
for address in cbData.address:
addr.append(str(address).split())
addr
Out:
[['서울시', '강남구', '논현로', '566', '강남차병원1층'],
['서울시', '서초구', '강남대로', '369', '1층'],
['서울시', '강남구', '압구정로', '461', '네이처포엠빌딩B108,109호'],
['서울시', '강남구', '도산대로', '126'],
['서울시', '강남구', '논현로', '842', '압구정빌딩1층'],
['서울시', '강남구', '논현로', '512', '지상1,2층'],
...
(3) 행정 구역 주소 체계에 맞게 정리
join(): 리스트를 문자열로 일정하게 합쳐주는 함수. '구분자'.join(리스트)
addr2 = []
for i in range(len(addr)):
if addr[i][0] == "서울": addr[i][0] = "서울특별시"
elif addr[i][0] == "서울시": addr[i][0] = "서울특별시"
elif addr[i][0] == "부산시": addr[i][0] = "부산광역시"
elif addr[i][0] == "인천": addr[i][0] = "인천광역시"
elif addr[i][0] == "대전시": addr[i][0] = "대전광역시"
elif addr[i][0] == "광주": addr[i][0] = "광주광역시"
elif addr[i][0] == "울산시": addr[i][0] = "울산광역시"
elif addr[i][0] == "세종시": addr[i][0] = "세종특별자치시"
elif addr[i][0] == "경기": addr[i][0] = "경기도"
elif addr[i][0] == "충북": addr[i][0] = "충청북도"
elif addr[i][0] == "충남": addr[i][0] = "충청남도"
elif addr[i][0] == "전북": addr[i][0] = "전라북도"
elif addr[i][0] == "전남": addr[i][0] = "전라남도"
elif addr[i][0] == "경북": addr[i][0] = "경상북도"
elif addr[i][0] == "경남": addr[i][0] = "경상남도"
elif addr[i][0] == "제주": addr[i][0] = "제주특별자치도"
elif addr[i][0] == "제주도": addr[i][0] = "제주특별자치도"
elif addr[i][0] == "제주시": addr[i][0] = "제주특별자치도"
addr2.append(''.join(addr[i]))
addr2
Out:
['서울특별시강남구논현로566강남차병원1층',
'서울특별시서초구강남대로3691층',
'서울특별시강남구압구정로461네이처포엠빌딩B108,109호',
'서울특별시강남구도산대로126',
'서울특별시강남구논현로842압구정빌딩1층',
...
(4) 기존 파일에 행정 구역 주소 체계에 맞게 정리된 주소 합치기
addr2=pd.DataFrame(addr2, columns=['address2'])
cbData2=pd.concat([cbData, addr2], axis=1)
#옆(가로)으로 결합, axis=0은 아래(세로)로 결합
cbData2.head()
cbData2.to_csv('CoffeeBean2.csv', encoding='cp949', index=False)
4. 분석 모델 구축 및 결과 시각화
folium 패키지 설치
- Map() 함수:
!pip install folium
import folium
지도 객체에 커피 매장 위치 표시하기
- Geocoder-Xr 사용하여 매장 위치의 위도 경도 찾기 (http://www.gisdeveloper.co.kr/?cat=143)
- 지도에 매장 위치 표시하기
cbGeoData = pd.read_csv('CoffeeBean3.csv', encoding='UTF-8', engine='python')
mapCB = folium.Map(location = [37.5555038, 126.9737511], zoom_start=15)
for i, store in cbGeoData.iterrows():
folium.Marker(location = [store['_Y'], store['_X']],
popup = store['store'], icon = folium.Icon(color='red', icon='star')).add_to(mapCB)
mapCB.save('coffeebean_map_cb.html')
FIN.
[빅데이터 분석] 10. 머신러닝 분류 분석 (0) | 2023.07.25 |
---|---|
[빅데이터 분석] 09. 지리 정보 분석 II (0) | 2023.07.25 |
[빅데이터 분석] 07. 텍스트 빈도 분석 (0) | 2023.07.25 |
[빅데이터 분석] 06. 통계 분석II (1) | 2023.07.25 |
[빅데이터 분석] 05. 통계 분석 (1) | 2023.07.24 |
댓글 영역