ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (11) 데이터분석_따릉이 API를 이용한 프로젝트
    데이터분석 2023. 6. 15. 17:09
    728x90

    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

     

    댓글

Designed by Tistory.