상세 컨텐츠

본문 제목

[빅데이터 분석] 08. 지리 정보 분석

[SW]/빅데이터 (2023) (완)

by 시원00 2023. 7. 25. 14:17

본문

728x90

project8. 특정 주소에 대한 지리 정보 분석 후, 지도에 시각화

  1. 핵심 개념: 지오 데이터(Geo Data), 지리 정보 시각화 라이브러리
  2. 데이터 수집
    • 앞에서 크롤링으로 수집한 CoffeeBean.csv
    • 행정구역 주소체계 데이터: 국가통계포털
  3. 데이터 준비 및 탐색
    • 데이터 정제: 주소의 행정구역 이름을 정확한 이름으로 수정 (Excel 이용)
    • 데이터 조합: 필요한 컬럼 추출 및 병합
  4. 분석 모델 구축 및 결과 시각화
    • 포리움 라이브러리(folium lib.)로 맵 생성
    • 특정 주소의 위치를 시각화한 맵

 

 

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')

coffeebean_map_cb.html

 

 

FIN.

728x90

관련글 더보기

댓글 영역