1. API(Application Programming Interface)
- 여러 프로그램들과 데이터베이스, 여러 기능들의 상호 통신 방법을 정하고 도와주는 매개체
2. 따릉이 API 접속하기
import requests
import folium
import json
from pandas.io.json import json_normalize
import warnings
warnings.filterwarnings('ignore')
request = requests.post(targetSite, data={'stationGrpSeq' : 'ALL'})
print(request)
print(request.text)
3. 따릉이 데이터 분석하기
# json.loads(): json타입의 문자열 데이터를 파이썬에서 처리할 수 있도록 변환(딕셔너리 타입)
bike_json = json.loads(request.text)
# json_normalize(): 딕셔너리 타입의 데이터를 판다스 데이터프레임으로 변환
bike_df = json_normalize(bike_json, 'realtimeList')
bike_df
bike_df_map = bike_df[['stationName', 'stationLongitude', 'stationLatitude', 'rackTotCnt',
'parkingBikeTotCnt', 'parkingQRBikeCnt', 'parkingELECBikeCnt']]
bike_df_map
# 위도, 경도 -> float로 변환
# 전체 자전거 대수, 주차된 자전거 총 대수, 주차된 QR 자전거 총 대수, 주차된 새싹 자전거 총 대수 -> int
# total 파생변수 추가 -> 주차된 자전거 총 대수 + 주차된 QR자전거 총 대수 + 주차된 새싹 자전거 총 대수
bike_df_map = bike_df_map.astype({'stationLongitude': 'float', 'stationLatitude' : 'float'})
bike_df_map = bike_df_map.astype({'rackTotCnt' : 'int', 'parkingBikeTotCnt' : 'int', 'parkingQRBikeCnt' : 'int', 'parkingELECBikeCnt': 'int'})
bike_df_map['total'] = bike_df_map['parkingBikeTotCnt'] + bike_df_map['parkingQRBikeCnt'] + bike_df_map['parkingELECBikeCnt']
print(bike_df_map.dtypes)
# 따릉이 모든 데이터를 지도에 표시하기
# 팝업 -> 대여소이름 일반:X대, QR:X대, 새싹:X대, 총:X대
bike_map = folium.Map(location=[bike_df_map['stationLatitude'].mean(), bike_df_map['stationLongitude'].mean()], zoom_start=12)
for index, data in bike_df_map.iterrows():
string = '{} 일반:{}대, QR:{}대, 새싹:{}대, 총:{}대'.format(data['stationName'], data['parkingBikeTotCnt'],
data['parkingQRBikeCnt'], data['parkingELECBikeCnt'], data['total'])
popup = folium.Popup(string, max_width=600)
folium.Marker(location=[data['stationLatitude'], data['stationLongitude']], popup=popup).add_to(bike_map)
bike_map