본문 바로가기

데이터 분석

12.스타벅스 API를 이용한 프로젝트

스타벅스 API를 이용한 프로젝트

 

라이브러리 import

import requests
import folium
import json
from pandas.io.json import json_normalize
import warnings
warnings.filterwarnings("ignore")

 

스타벅스 api 데이터 가져오기

targetSite = 'https://www.starbucks.co.kr/store/getSidoList.do'
request = requests.post(targetSite)
print(request)
print(request.text)

 

스타벅스 데이터를 딕셔너리 타입으로 변환하기

star_json = json.loads(request.text)
print(star_json)

 

스타벅스 데이터의 'list' 키 값의 길이 확인

print(len(star_json["list"])) # 17

 

스타벅스 '시도' 코드 출력하기

# sido_list 딕셔너리 선언
sido_list = dict()

# star_json["list"]의 길이만큼 반복
for sido in star_json["list"]:
	# 코드를 key 값, 이름을 value 값으로 저장
    sido_list[sido["sido_cd"]] = sido["sido_nm"]
    
print(sido_list)
```
{'01': '서울', '08': '경기', '02': '광주', '03': '대구', 
'04': '대전', '05': '부산', '06': '울산', '07': '인천', 
'09': '강원', '10': '경남', '11': '경북', '12': '전남', 
'13': '전북', '14': '충남', '15': '충북', '16': '제주', '17': '세종'}
```

 

'시도 코드'를 입력받고 해당 시의 구군 출력

sido_cd = input("시도 코드를 입력하세요 : ")

targetSite = 'https://www.starbucks.co.kr/store/getGugunList.do'
# post로 시도코드를 data={"sido_cd":sido_cd})로 요청
request = requests.post(targetSite, data={"sido_cd":sido_cd})
print(request) #<Response [200]> 
print(request.text)

뒤에 내용이 더 있다

 

스타벅스 '구군 코드' 출력하기

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)
```
{'0101': '강남구', '0120': '강동구', '0102': '강북구', '0103': '강서구', 
'0104': '관악구', '0105': '광진구', '0121': '구로구', '0106': '금천구', 
'0107': '노원구', '0108': '도봉구', '0122': '동대문구', '0109': '동작구', 
'0110': '마포구', '0111': '서대문구', '0112': '서초구', '0123': '성동구', 
'0113': '성북구', '0114': '송파구', '0115': '양천구', '0116': '영등포구', 
'0124': '용산구', '0117': '은평구', '0118': '종로구', '0119': '중구', '0125': '중랑구'}
```

 

'시도 코드'와 '구군 코드'를 입력 받고 해당 매장의 리스트 정보 저장

# 검색하고자 하는 매장의 시도코드를 입력하세요
sido_cd = input("검색하고자 하는 매장의 시도코드를 입력하세요 : ")
# 검색하고자 하는 매장의 구군코드를 입력하세요
gugun_cd = input("검색하고자 하는 매장의 구군코드를 입력하세요 : ")

# 해당 매장의 리스트
targetSite = "https://www.starbucks.co.kr/store/getStore.do"
request = requests.post(targetSite, data={
    'ins_lat': 37.5108295,
    'ins_lng': 127.02928809999999,
    'p_sido_cd':sido_cd,
    'p_gugun_cd':gugun_cd,
    'in_biz_cd': '',
    'iend':2000,
    'set_date': ''
})

star_json = json.loads(request.text)

 

해당(강남구) 매장 정보를 데이터프레임으로 출력

star_df = json_normalize(star_json, "list")

star_df

 

info 확인

star_df.info

컬럼이 131개나 있음

 

필요한 컬럼만 남기고 저장

# s_name, sido_code, sido_name, gogun_code, gugun_name, doro_address, lat, lot 컬럼만 저장
star_df_copy = star_df[['s_name','sido_code', 'sido_name', 'gugun_code', 'gugun_name', 'doro_address', 'lat', 'lot']]

 

dtype 확인

star_df_copy.dtypes

위도 경도가 object

 

위도 경도 dtype float로 변경

star_df_copy["lat"] = star_df_copy["lat"].astype(float)
star_df_copy["lot"] = star_df_copy["lot"].astype(float)

float로 변경됨

 

해당 데이터를 지도에 출력

# 강남구 모든 지점의 평균 위도, 경도로 설정
star_map = folium.Map(location=[star_df_copy['lat'].mean(), star_df_copy['lot'].mean()], zoom_start=12)

for index, data in star_df_copy.iterrows():
    # popup: 00점 주소: 0000
    string = '{}점 주소: {}'.format(data['s_name'],data['doro_address'])
    popup = folium.Popup(string, max_width=600)
    # 해당 지점의 위도와 경도에 마커 찍기
    folium.Marker(location=[data['lat'], data['lot']], popup=popup).add_to(star_map)
star_map