TOP
class="layout-aside-left paging-number">
본문 바로가기
데이터분석 만능열쇠 [파이썬]/<파이썬 데이터 분석>

[파이썬] 시카고 맛집 분석-3

by 기록자_Recordian 2024. 4. 18.
728x90
반응형
시작에 앞서
해당 내용은 <파이썬으로 데이터 주무르기> -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다.
보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다.

이전 분석 보기
 

[파이썬] 시카고 맛집 분석-2

시작에 앞서 해당 내용은 -민형기 저, BJPUBLIC 출판사 의 내용을 토대로 작성되었습니다. 보다 자세한 내용은 해당 교재를 확인하여 주시기 바랍니다. 이전 분석 보기 [파이썬] 시카고 맛집 분석-1

puppy-foot-it.tistory.com


맛집 위치를 지도에 표기하기

 

먼저 필요한 모듈을 import

import folium
import pandas as pd
import googlemaps
import numpy as np

module import

 

전 시간에 저장했던 csv 파일 불러오기

df = pd.read_csv('../data/03. best_sandwiches_list_chicago2.csv', index_col=0)
df.head(5)

read csv

 

googlemaps 읽어오기 ( API Key 를 이용)

import googlemaps as gmaps

gmaps_key = "본인의 googlemaps API key"
gmaps = googlemaps.Client(key=gmaps_key)

50개 맛집의 위도와 경도를 df에 추가하기

df['lat'] = lat
df['lng'] = lng
df.head()

lat, lng df에 추가하기

그리고 50개의 맛집의, 위도, 경도의 평균값을 중앙에 두기

# 지도 생성
mapping = folium.Map(location=[df['lat'].mean(), df['lng'].mean()], zoom_start=11)
# 'latitude' 열과 'longitude' 열에서 평균값을 계산
folium.Marker([df['lat'].mean(), df['lng'].mean()],
              popup='center').add_to(mapping) # 중심에 마커 추가
mapping

mapping

 

 

50개의 맛집의 위도, 경도를 지도에 표기하기

# 지도 생성 및 중심 설정
mapping = folium.Map(location=[df['lat'].mean(), df['lng'].mean()], zoom_start=11)

# 데이터프레임 순회하면서 마커 추가
for n in df.index:
    if df['Address'][n] != 'Multiple':  # 'Address' 열 값이 'Multiple'이 아닌 경우에만 처리
        lat = df['lat'][n]  # 해당 행의 위도
        lng = df['lng'][n]  # 해당 행의 경도
        cafe_name = df['Cafe'][n]  # 해당 행의 카페 이름

        # 마커 추가
        folium.Marker([lat, lng], popup=cafe_name).add_to(mapping)

# 지도 출력
mapping

이라고 코드를 입력하였으나, 

'ValueError: Location values cannot contain NaNs.' 이라는 에러 메시지를 받았다.

 

gpt says " 해당 오류는 Folium에서 지도에 표시하려는 위치 값(location)에 NaN(결측치)이 포함되어 있어서 발생한 ValueError입니다."

이라고 하여 다시 gpt 선생님께 코드를 받았다

# NaN 값을 가진 행을 제외하고 유효한 위치 값만 필터링
valid_locations = df.dropna(subset=['lat', 'lng'])

# 지도 생성 및 중심 설정
mapping = folium.Map(location=[valid_locations['lat'].mean(), valid_locations['lng'].mean()], zoom_start=11)

# 데이터프레임 순회하면서 유효한 위치에 대해서만 마커 추가
for n in valid_locations.index:
    lat = valid_locations['lat'][n]  # 해당 행의 위도
    lng = valid_locations['lng'][n]  # 해당 행의 경도
    cafe_name = valid_locations['Cafe'][n]  # 해당 행의 카페 이름

    # 마커 추가
    folium.Marker([lat, lng], popup=cafe_name).add_to(mapping)

# 지도 출력
mapping


그리고 결과는,

chicago sandwiches 50
챗 gpt 진짜 엄청나다..

 


전체 코드

Chicago.ipynb
0.47MB

728x90
반응형