데이터는 어디서 오는가
| 소스 | 예 | 어떻게 가져오나 |
|---|---|---|
| 파일 | CSV, 엑셀 | 다운로드 |
| 데이터베이스 | 회사 주문 테이블 | SQL 쿼리 |
| API | 날씨, 미세먼지, 환율 | 인터넷 주소로 요청 |
| 로그 | 웹사이트 클릭 기록 | 자동으로 계속 쌓임 |
이 수업에서 직접 해보는 건 파일과 API 두 가지입니다.
API란
API는 "인터넷 주소로 요청하면 데이터를 JSON으로 돌려주는 창구"입니다. 브라우저에 주소를 치면 웹페이지가 오듯, 프로그램이 주소를 치면 데이터가 옵니다.
import requests
r = requests.get("https://api.example.com/weather", params={"city": "Seoul"})
print(r.status_code) # 200이면 성공
data = r.json() # JSON → 파이썬 딕셔너리
딱 세 줄입니다. requests.get → .json() → 딕셔너리.
JSON을 표로 바꾸기
API 응답은 보통 "리스트 안에 딕셔너리" 모양입니다. 1단계에서 본 그 모양이니 Pandas에 바로 넣을 수 있습니다.
import pandas as pd
items = data["items"] # 실제 데이터 목록이 있는 위치 (API마다 다름)
df = pd.DataFrame(items)
df.head()
여러 페이지 받기
API는 한 번에 100건처럼 조금씩 줍니다. 더 받으려면 페이지 번호를 올려가며 반복합니다.
rows = []
for page in range(1, 6): # 1~5페이지
r = requests.get(url, params={"page": page, "size": 100})
rows.extend(r.json()["items"])
df = pd.DataFrame(rows)
수집할 때 지킬 것 세 가지
- 원본 그대로 저장 — 받은 JSON/CSV를 먼저
raw/폴더에 저장하고, 가공은 그 다음에 - 너무 빨리 많이 요청하지 않기 — 대부분 API에 하루 호출 한도가 있음
- 인증키는 코드에 남기지 않기 — 비밀번호와 같음
로그와 스트림 — 개념만
웹사이트 클릭 같은 데이터는 끝없이 계속 생깁니다. 이런 건 파일로 받기 어려워서 Kafka 같은 "데이터 컨베이어 벨트"를 중간에 둡니다.
웹서버 ──▶ [ Kafka ] ──▶ Spark
(만드는 쪽) (벨트) (받는 쪽)
이 수업에서는 이름과 그림만 알아두면 됩니다.
연습
- 다음 챕터(공공데이터포털)를 따라 API 키를 받고 100건 이상 수집해보기
- 받은 데이터를
raw/폴더에 CSV로 저장하기