API 실시간 데이터 사용

XIXI·2022년 8월 15일
0

KT 에이블

목록 보기
2/10

배운 내용을 토대로 새로운 API를 불러와 버스 데이터 분석을 진행해봄

🌱 오픈 API

✏️ 개념

Open Application Programming Interface
누구나 사용할 수 있도록 공개된 API를 말함.

ex) 네이버 지도, 구글맵 등

✏️ 사이트

공공데이터포털
서울 열린데이터광장

✏️ 사용방법

회원가입 후 인증키 신청
인증키와 url로 사용 가능

라이브러리 불러오기

import urllib.request 
import json 
import pandas as pd 

%config InlineBackend.figure_format = 'retina'

API 파일을 불러오기 위한 라이브러리를 먼저 불러온다

인증키와 주소, 파일 변환

# 인증키와 주소
key = ''
start = 1
end = 1000
use_dt = 20220811
url = f'http://openapi.seoul.go.kr:8088/{key}/json/CardBusStatisticsServiceNew/{start}/{end}/{use_dt}/'


# 데이터 가져오기
response = urllib.request.urlopen(url) 
json_str = response.read().decode('utf-8')

# JSON -> Dict으로 변환
json_object = json.loads(json_str)

# Dict -> 데이터프레임으로 변환
bus = pd.json_normalize(json_object['CardBusStatisticsServiceNew']['row'])

# 확인
bus.head()

상위 데이터를 확인할 수 있음

시각화 라이브러리 불러오기

import matplotlib.pyplot as plt

plt.rcParams['font.family'] = 'Malgun Gothic'
plt.rcParams['axes.unicode_minus'] = False

데이터셋 정보 참고하여 열이름 변경

bus.rename(columns={'USE_DT': '사용일자',
                    'BUS_ROUTE_ID': '노선ID',
                    'BUS_ROUTE_NO': '노선번호',
                    'BUS_ROUTE_NM': '노선명',
                    'STND_BSST_ID': '표준버스정류장ID',
                    'BSST_ARS_NO': '버스정류장ARS번호',
                    'BUS_STA_NM': '역명',
                    'RIDE_PASGR_NUM': '승차총승객수',
                    'ALIGHT_PASGR_NUM': '하차총승객수',
                    'WORK_DT': '등록일자'}, inplace=True)

bus.head()

열 이름을 변경하여 정보 확인을 쉽게 했다.

✏️ 데이터 분석

버스 승차 인원이 가장 많은 역명 TOP 10

# 승차 인원 TOP 10
bus_top10 = bus.sort_values(by='승차총승객수', ascending=False).head(10)
bus_top10.reset_index(drop=True, inplace=True)

# 확인
bus_top10

sort_values(by='정렬 기준', ascending='False').head(10): 정렬 기준으로 ascending(정렬) False(내림차순)으로 정렬하는데 상위 10개 데이터 출력
bus_top10.reset_index(drop=True, inplace=True) : reset_index(인덱스 초기화) drop(기존 인덱스 삭제) inplace(바로적용) 하기

이를 토대로 시각화하면

plt.figure(figsize=(10, 5))
plt.title('승차 인원 TOP 10', pad=10)
plt.bar(bus_top10['역명'], bus_top10['승차총승객수'])
plt.xlabel('역명')
plt.ylabel('탑승자 수')
plt.xticks(rotation=80)
plt.show()

  • plt.figure(figsize=(가로, 세로)) : 그래프 사이즈
  • plt.title('제목', pad=표로부터 거리 수치) : 그래프 제목
  • plt.bar(x축, y축) : 막대 그래프 작성 기준
  • plt.xlabel('x축 이름') : x축 라벨 표시
  • plt.ylabel('y 축 이름') : y 축 라벨 표시
  • plt.xticks(rotation=80) : x축 데이터 기울기
  • plt.show() : 그래프 출력

노선별 승하차 인원

# 노선별 승하차 인원
bus_linesum = bus.groupby(by='노선명', as_index=False)[['승차총승객수', '하차총승객수']].sum()

# 정렬
bus_linesum.sort_values(by=['승차총승객수'], ascending=False, inplace=True)

# 인덱스 초기화
bus_linesum.reset_index(drop=True, inplace=True)

# TOP 10 확인
bus_linesum

groupby()로 기준열 입력, 기준에 따라 확인할 데이터 리스트 입력 후 sum() 메소드로 합계
승차총승객수 기준으로 내림차순 정렬
정렬로 인한 인덱스를 초기화 작업
데이터 확인

🌷 마무리

오픈 API 사용방법을 알아서 데이터 분석을 다양하게 해볼 수 있을 것 같다.
데이터를 기준에 따라 확인하니 새롭게 알 수 있는 점들이 생겨 재밌는 것 같다.
데이터 분석을 입체적으로 한다면 많은 기회를 찾아낼 수 있을 것 같다.

profile
Life is experience:)

0개의 댓글