← 목록으로
단계 04

데이터 수집

파일·DB·API·로그에서 데이터를 모으는 원리, 메시지 큐(Kafka)와 스트림 개념.

데이터는 어디서 오는가

소스예어떻게 가져오나
파일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)

수집할 때 지킬 것 세 가지

  1. 원본 그대로 저장 — 받은 JSON/CSV를 먼저 raw/ 폴더에 저장하고, 가공은 그 다음에
  2. 너무 빨리 많이 요청하지 않기 — 대부분 API에 하루 호출 한도가 있음
  3. 인증키는 코드에 남기지 않기 — 비밀번호와 같음

로그와 스트림 — 개념만

웹사이트 클릭 같은 데이터는 끝없이 계속 생깁니다. 이런 건 파일로 받기 어려워서 Kafka 같은 "데이터 컨베이어 벨트"를 중간에 둡니다.

 웹서버 ──▶ [ Kafka ] ──▶ Spark
 (만드는 쪽)   (벨트)    (받는 쪽)

이 수업에서는 이름과 그림만 알아두면 됩니다.

연습

  1. 다음 챕터(공공데이터포털)를 따라 API 키를 받고 100건 이상 수집해보기
  2. 받은 데이터를 raw/ 폴더에 CSV로 저장하기