데이터 부트캠프 - Today I Learned

[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_8주차_25.01.17

onion95 2025. 1. 17. 21:13

Today's Goals

1. API로 데이터 수집하기

2. 통계학 개인과제 해설

 

 

 

데이터 수집을 이야기할 때 항상 오픈API에 대해 들었는데,

어떤건지, 어떻게 하는지 궁금했던 차에 라이브 세션으로 배울 수 있어서 재밌었다!

 

머신러닝은 아직 감이 잡히지 않은 것 같다.

올 초에 분명 예측 모델을 활용해 봤었는데, 그 땐 대체 어떻게 한건지...

 

 

 

 

 

1. 오픈API에서 데이터 수집


 

[공공데이터 포털에서 api 데이터 수집하기]

import requests
import json
import pandas as pd

url = 'http://apis.data.go.kr/1160100/service/GetFinaStatInfoService_V2/getBs_V2'
params = {
    'pageNo': 1,
    'numOfRows': 100,
    'resultType': 'json',
    'serviceKey': 'CInqflqEroMBIvwzFgjXQJmsywE6qccC7DzY9BmyjB8inNR88bJjlwr2NzkrLN5VZKyMf39GNtGDHdloYAKJWw=='
}
response = requests.get(url, params=params)
  • 데이터를 불러올 수 있는 url을 설정하고, 파라미터 값을 지정함 
  • 파라미터는 서버에 특정한 요청을 전달하는 것으로, 필요한 데이터의 조건을 설정하거나, 응답 형식을 지정하거나, 필터링 등을 수행함(몇 행을 가져올건지, 어떤 타입의 데이터를 가져올건지, api 사용 키는 뭔지 등등)
  • requests.get()을 통해 데이터를 불러옴
data = response.json()
  • 위와 같은 과정으로 HTTP 응답 본문을 JSON 데이터로 디코딩함(이 경우에만 사용되는 것이 json())
  • 이전에 json형태로 컬럼값이 저장된 것을 전처리 했었는데, 그 때 사용한 json.loads와는 다름
  • json.loads()는 문자열로 존재하는 json 데이터를 파이썬 객체(딕셔너리 등) 형태로 이용하는 방법임
  • json.load()는 파일 형태로 존재하는 json 데이터를 파이썬 객체(딕셔너리 등)로 이용하는 방법임
clean_data = json.dumps(data, indent=4, ensure_ascii=False)
print(clean_data)
  • 불러온 데이터를 json 문자열 형태로 보기 위해 json.dumps() 사용(이 결과를 loads를 활용하여 딕셔너리 변환하는 것) 
  • 문자열로 변환하면서 한글은 아스키 문자로 변환될 수 있는데, 이를 방지하기 위해 ensure_ascii=False를 설정해줌(유니코드 문자 오류 방지)
  • indent는 들여쓰기 수준을 설정해주는 것
  • 최종적으로 확인한 결과는 아래와 같음

item = data['response']['body']['items']['item']
df= pd.DataFrame(item)
df
  • 확인된 데이터 구조에 따라, 우리가 필요한 데이터프레임은 item 안에 있음
  • item이하 값들을 추출하여 데이터프레임화 한 코드임

 

 

[최종 코드]

import requests
import json
import pandas as pd

url = 'http://apis.data.go.kr/1160100/service/GetFinaStatInfoService_V2/getBs_V2'
params = {
    'pageNo': 1,
    'numOfRows': 100,
    'resultType': 'json',
    'serviceKey': 'CInqflqEroMBIvwzFgjXQJmsywE6qccC7DzY9BmyjB8inNR88bJjlwr2NzkrLN5VZKyMf39GNtGDHdloYAKJWw=='
}
response = requests.get(url, params=params)

data = response.json()


#전체 데이터 json 형태 확인
# clean_data = json.dumps(data, indent=4, ensure_ascii=False)
# print(clean_data)


item = data['response']['body']['items']['item']
df= pd.DataFrame(item)
df

 

 

[처음부터 item 이하 값만 불러올 수 있다?]

  • 정보를 제공하는 페이지를 확인하면 아래와 같은 값을 확인할 수 있음

  • 코드에서 사용한 url의 가장 끝 부분을 위의 경로로 바꾸면 해당하는 파트의 이하값만 가져올 수도 있음

 

 

 

 

2. 통계학 개인과제 (해설)


 

[numpy와 pandas에서 구하는 표준편차의 차이점 - 함정이다!]

  • 기본적인 표준편차를 구하는 식은 다음과 같음

  • 이는 모집단의 표준편차를 구하는 식임
  • 표본의 표준편차를 구하는 식은 아래와 같은데, 표본 평균을 구할 때 이미 하나의 자유도를 소모했기 때문임(이렇게 N을 조정하는 것을 Bessel's correction(베셀의 보정)이라고 함)

  • 따라서 numpy를 이용하여 표본의 표준편차를 구하려면 다음과 같은 코드를 이용함
std_a = np.std(com_a, ddof=1)
  • ddof를 설정하면 표준편차를 구하는 식에서 N을 N-ddof로 조정하게 됨, 즉, ddof=1은 표본의 표준편차에 해당
  • pandas를 이용하여 표준편차를 구하는 경우, 기본적으로 표본이 기준이기 때문에 ddof 설정 필요 없음(다만 모집단의 표준편차를 구한다면 ddof=0 필요)