- 목적 : 어떤 지역을 특정 상품에 특화된 지역으로 만들기 위해서는 특정 상품에 대한 상권이 이루어 져야 한다
- 기준 : 서로 걸어갈 수 있는 거리, 500m
- 방법 : 대표 빵집의 주소(위도,경도)를 활용하여 해당 지역으로부터 500m 안에 있는 빵집을 확인한다
- 데이터 : 행정안전부_제과점영업의 2024년 업데이트 기준 영업중인 업소(성심당 제외)
1. 주소 전처리
1) 위도와 경로도 변환하기 위해 도로명 주소에 건물이름, 층수제거
total_df['도로명전체주소'] = total_df['도로명전체주소'].str.split('(').str[0]
total_df['도로명전체주소'] = total_df['도로명전체주소'].str.split(',').str[0]
2) 대표빵집의 시/군/구 지역만 추출
address_list = ['군산시','광주광역시 동구','천안시 서북구','천안시 동남구','부산광역시 중구','대구광역시 중구','서울특별시 중구','전주시','대전광역시 중구']
test = '|'.join(address_list)
final_df = total_df[total_df['도로명전체주소'].str.contains(test)==True]
- 찾고자 하는 문자열을 포함하는 행을 찾기 위해서 contains함수를 사용하는데리스트를 통해 여러문자열을 포함하는 행을 찾고싶다면 목적에 따라 구분자를 | 또는 & 사용
- '구분자'.join(리스트) : 리스트의 내용을 구분자로 분리가능
문자열 참고 : https://hyang2data.tistory.com/31
3) 위경도 번환
이유
- Geopy 라이브러리는 지리적 데이터를 다루는데 주소를 위경도로 변환하는 지오코딩과 거리 계산, 좌표 변환 등의 다양한 지리적 작업 가능
- 모든 빵집의 위도와 경도로 변환하면 geopy.distance모듈을 통해 두 지점간 거리 계산 가능
- 거리계산 방법 : great_circle 함수 ( 두 위경도 좌표 (lat1, lon1)와 (lat2, lon2) 간의 거리의 최단거리 계산 )
방법1. Nominatim모듈 사용
import time
from geopy.geocoders import Nominatim
# 도로명 주소를 위경도로 변환
def get_lat_long(address):
geolocator = Nominatim(user_agent="dkssud") # 아무이름이나, 생략시 접근이 거두됨
time.sleep(1) # 1초 지연
location = geolocator.geocode(address)
if location:
return (location.latitude, location.longitude)
else:
return (None, None)
# 각 주소에 대해 위경도 얻기
df['Coordinates'] = df['Address'].apply(get_lat_long)
df[['Latitude', 'Longitude']] = pd.DataFrame(df['Coordinates'].tolist(), index=df.index)
# 결과 확인
print(df)
*굉장히 오래걸림...약1000개 40분 소요
방법2. 구글확장프로그램 Geocode
참고 : https://program8.tistory.com/27
더 빠르다..
2. 500m거리내 빵집업소 찾기
from geopy.distance import great_circle
# 500m 이내인지 확인하는 함수
# coord1 : 기준좌표
# coord2 : 비교대상
def is_within_500m(coord1, coord2):
if None in coord1 or None in coord2: # 위경도 중 하나라도 None이면 False 반환
return False
distance = great_circle(coord1, coord2).meters # 기준meter단위
return distance <= 500 # 거리가 500m 이하인 경우 True, 그렇지 않으면 False 반환
great_circle 함수 : 두 위경도 좌표 (lat1, lon1)와 (lat2, lon2) 간의 거리의 최단거리 계산
# 기준점 : 군산, 이성당
reference_point = (35.9831181, 126.717139)
# 기준점과 각 주소 간의 거리 확인
군산주소['Within 500m'] = 군산주소['Coordinates'].apply(
lambda coord: "Yes" if is_within_500m (reference_point, coord) else "No")
# coord(위경도의 튜플 컬럼)이 is_within_500m 적용시 True면 'Yes' 아니면 'No' 출력
print('군산 이성당 주변 500m 빵집 : ', 군산주소[군산주소['Within 500m']=='Yes']['관리번호'].nunique())
결과
3. 각 대표빵집의 주변 빵집 확인하기
- 군산 : 6(기준빵집 제외)
- 광주: 5
- 전주 : 7
- 부산
- 대구 : 9
- 서울 : 7
결과
'프로젝트' 카테고리의 다른 글
[분석프로젝트] GA 데이터 분석을 통해 목표 설정하기 (1) | 2024.08.14 |
---|---|
[ 분석프로젝트 ] 천안시 오락 및 편의 시설이 많은 장소는 어디일까? (0) | 2024.08.13 |
[분석프로젝트] 제과점영업 과연 인기가 있을까? (0) | 2024.08.09 |
[코드리뷰] 고객생애가치(CLV) 계산하기 (0) | 2024.08.07 |
[고객분석] 이커머스 데이터2 EDA (0) | 2024.03.29 |