본문 바로가기

6.Numpy | Pandas | Crawling

5/30(화) IT K-DT(61일차) / 12. 스타벅스 API를 이용한 데이터 분석 예제

 

12. 스타벅스 API를 이용한 데이터 분석 예제

 

import requests # 특정 API의 호출/응답 라이브러리
import folium # 지도 작성 라이브러리
import json 
from pandas.io.json import json_normalize # text를 dictionary로 바꿔주는 라이브러리
import warnings
warnings.filterwarnings('ignore')


# 스타벅스 시/도 리스트 API의 호출

targetSite = 'https://www.starbucks.co.kr/store/getSidoList.do'
request = requests.post(targetSite)
print(request) # 정상적인 호출 확인
print(request.text) # 시,도의 list가 value값으로 전달됨

 

 

star_json = json.loads(request.text)
print(star_json)
# list 안의 key value의 갯수 구해보기
print(len(star_json['list'])) # 17개

 


# sido_list를 만들어서 값(sido_nm)만 뽑아오기

sido_list = dict()
for sido in star_json['list']:
  sido_list[sido['sido_cd']] = sido['sido_nm']
print(sido_list)

 


# 스타벅스 구/군 리스트 API의 호출 

sido_cd = input('시도 코드를 입력하세요:') # 시/도 코드를 입력 시 출력이 가능하도록 함
targetSite = 'https://www.starbucks.co.kr/store/getGugunList.do'
request = requests.post(targetSite, data={'sido_cd': sido_cd}) 
# 시/도 리스트가 있어야 구/군의 확인이 가능함
print(request) # 정상적인 호출 확인
print(request.text)

 

 

# gugun_list 만들어서 값(gugun_nm)만 뽑아오기
star_json = json.loads(request.text)
gugun_list = dict()
for gugun in star_json['list']:
  gugun_list[gugun['gugun_cd']] = gugun['gugun_nm']
print(gugun_list)

 


# 검색하고자하는 매장의 시도코드/구군코드를 입력
# 스타벅스 매장리스트 API의 호출 

 

targetSite = 'https://www.starbucks.co.kr/store/getStore.do'

sido_input = input('검색하고자하는 매장의 시도코드를 입력하세요')
gugun_input = input('검색하고자하는 매장의 구군코드를 입력하세요')


# 해당 매장의 리스트를 모두 출력

 

request = requests.post(targetSite, data={
  'ins_lat': '37.5108295',  # 서울 기준 위도/경도
  'ins_lng': '127.02928809999999',
  'p_sido_cd':sido_input,
  'p_gugun_cd':gugun_input,
  'in_biz_cd': '',
  'iend':2000,
  'set_date': ''
})

star_json = request.json()


# 해당 매장 정보를 데이터프레임을 출력

star_df = json_normalize(star_json, 'list')
star_df

 


# s_name, sido_code, sido_name, gugun_code, gugun_name, doro_address, lat, lot 컬럼만 남기고 삭제

star_df_map = star_df[['s_name', 'sido_code', 'sido_name', 'gugun_code', 'gugun_name', 
'doro_address', 'lat', 'lot']]
star_df_map

 


# type 확인 → 전부 object타입

star_df_map.dtypes

 


# 위도, 경도를 float로 변경

 

star_df_map['lat'] = star_df_map['lat'].astype(float)
star_df_map['lot'] = star_df_map['lot'].astype(float)



# 지도 출력

star_map = folium.Map(location = [star_df_map['lat'].mean(), star_df_map['lot'].mean()], 
zoom_start=14)
for index, data in star_df_map.iterrows():
  popup = folium.Popup(data['s_name'] + '점 주소 : ' + data['doro_address'], max_width=600)
  folium.Marker(location=[data['lat'], data['lot']], popup=popup).add_to(star_map)
star_map