Ssoon
[ 혼공데분 - Chapter02 ] 데이터 수집하기 - API 사용하기 본문
✅ API 란
- Application Programming Interface
- 두 프로그램이 서로 댛롸하기 위한 방법을 정의한 것
- 애플리케이션 간의 통신을 위해서는 웹 기반의 API 가 널리 사용
- 웹 기반 API
- HTTP 프로토콜을 사용해 API를 만드는 것
- 주로 CSV, JSON, XML 형태로 데이터를 전달
✅ 파이썬에서 JSON 데이터 다루기
- JSON (JavaScript Object Notation)
- 파이썬의 딕셔너리 와 리스트를 중첩해 놓은 것과 비슷
- 코랩에서 JSON 형식으로 파이썬 딕셔너리 생성
- 웹 기반 API 로 전달할 때는 파이썬 딕셔너리가 아닌 텍스트로 전달
💠 파이썬 객체를 JSON 문자열로 변환하기 : json.dumps( ) 함수
- 파이썬 json 패키지를 사용 딕셔너리 d 를 JSON 형식에 맞는 문자열로 변환
- ensure_ascii=False ▶ 원래 저장된 문자를 그대로 출력
- d_str type( ) 함수로 데이터 타입 확인
웹 기반 API 는 전송하려는 파이썬 객체를 json.dumps( ) 함수를 사용 JSON 문자열로 변환하여 전송
JSON 문자열을 파이썬 프로그램에 사용하려면 다시 파이썬 딕셔너리로 변환
💠 JSON 문자열을 파이썬 객체로 변환하기 : json.loads( ) 함수
- d_str 문자열을 파이썬 딕셔너리로 변환
- d2 타입 확인
웹 기반 API 에서 전달되는 데이터가 JSON 문자열이라면 json.loads( ) 함수를 사용해 파이썬 객체로 변환한 다음 분석 프로그램에서 사용
- JSON 문자열을 json.loads( )함수에 직접 전달
- 파이썬 딕셔너리 변환 후 "author" 키의 값인 두 번째 항목 출력
- 도서 두 권을 JSON 개체로 표현하고 이를 대괄호 안에 콤마로 나열
- JSON 배열을 파이썬 리스트로 변환
- d4[0] : 파이썬 리스트의 1번째 딕셔너리
- d4[0]['name'] : 1번째 딕셔너리의 "name" 키에 해당하는 값 반환
💠 JSON 문자열을 데이터프레임으로 변환하기 : read_json ( ) 함수
- d4_str 문자열을 판다스 데이터프레임으로 변환
- JSON 객체 두 개가 데이터프레임의 각 행에 매핑
- JSON 문자열 ▶ 파이썬 객체 ▶ DataFrame 클래스 사용
- d4_str 을 파이썬 객체로 변환한 d4를 사용해 데이터 프레임 생성
✅ 파이썬에서 XML 데이터 다루기
- XLM (eXtensible Markup Language)
- 구조적이지 못하기 때문에 프로그램 간의 약속대로 전송하는 API 에서는 적절하지 않음
- 엘리먼트 들이 계층 구조를 이루면서정보를 표현
- 엘리먼트는 시작태그와 종료태그로 감싼다.
💠 XML 문자열을 파이썬 객체로 변화하기 : fromstring( ) 함수
- XML 문자열을 x_str 변수에 저장
- xml.etree.ElementTree 모듈의 fromstring( )함수 를 사용 x_str 문자열을 XML로 변환
- type( )함수로 fromstring( ) 함수가 어떤 객체를 반환하는지 book 변수 타입 확인
- book 객의 tag 속성을 출력하면 엘리먼트 이름을 쉽게 확인
💠 자식 엘리먼트 확인하기 : findtext( ) 메서드
- book객체를 리스트로 변환하여 자식 엘리먼트 확인
- 리스트로 변환할 떄는 list( ) 함수 사용
- book_childs 리스트 각 항목을 name, author, year 변수에 할당하고 text 속성으로 엘리먼트에 있는 텍스트 출력
- XML은 자식 엘리먼트 순서가 항상 일정하다는 것을 보장하지 않음 ▶ 순서대로 자식 엘리먼트를 찾는 것은 위험
- book 객체의 findtext( ) 메서드를 사용 ▶ 해당 자식 엘리먼트를 탐색하여 자동으로 텍스트를 반환
- findtext( ) 메서드에 찾으려는 태그 이름을 넣어주면 자동으로 해당 엘리먼트를 찾아 텍스트로 변환
- 두개의 <book> 엘리먼트 표현
- XML은 JSON과 달리 배열 같은 구조가 없음 두 개의 <book> 엘리먼트를 감싸는 부모 엘리먼트를 만듬
- x2_str 의 부모 엘리먼트는 <book> 이 아니라 <books> 가 됨
- fromstring( ) 함수를 사용해 부모 엘리먼트 확인
💠 여러 개의 자식 엘리먼트 확인하기 : findall( ) 메서드와 for 문
- 동일한 이름을 가진 여러 개의 자식 엘리먼트를 찾을 때 ▶ findall( ) 메서드와 for 문 사용
- findall( ) 메서드가 반환하는 자식 엘리먼트 <book> 에서 'name', 'author', 'year' 를 찾아 출력
JSON : API에서 text 전달 -> json.loads()함수 -> 파이썬 객체로 변환 -> text 추출
XML : xml.etree.ElementTree 모듈에 있는 fromstring()함수 -> 부모 엘리먼트를 얻고 -> findall()메서드로 자식 엘리먼트에 담긴 text를 추출
✅ API로 20대가 가장 좋아하는 도서 찾기
💠 API를 호출하는 URL 작성하기
- 도서관 정보나루 공개 API를 사용하려면 호출 URL 필요
http://data4library.kr/api/loanItemSrch?authKey=[발급받은키]&startDt=2022-01-01&endDt=2022-03-31&
gender=1&age=20®ion=11;31&addCode=0&kdc=6&pageNo=1&pageSize=10
- 호출 URL : http://data4library.kr/api/loanItemSrch
- 파라미터
- format : 지정하지 않으면 XML 문서로 반환 ; 여기서는 json으로 정의 JSON 문서로 받음
- startDt : 검색 시작 일자
- endDt : 검색 종료 일자
- age : 연령대
- authKey : 인증키, 정보나루 사이트에서 인들키를 신청하여 받아야 함
- 조회할 값은 호출 URL 뒤에 파라미터를 뒤에 연결
- 파라미터과 값은 = 문자로 연결
- 파라미터 사이는 & 문자로 연결
- 호출 URL 과 파라미터는 ? 문자로 연결
=> HTTP GET 방식
- 호출URL완성
http://data4library.kr/api/loanItemSrch?format=jason&startDt=2021-04-01&endDt=2021-04-30&age=20&authKey=인증키
💠 API 인증키 발급하기
도서관 정보나루 승인대기중
✅ 공개 API로 웹에서 데이터 가져오기
'혼자 공부하는 데이터분석' 카테고리의 다른 글
[ 혼공데분 - Chapter02 ] 데이터 수집하기 - 웹 스크래핑 사용하기 (0) | 2024.01.14 |
---|---|
[혼공데분] 01 데이터분석을 시작하며 - 3) 이 도서가 얼마나 인기가 좋을까요? (0) | 2024.01.02 |
[혼공데분] 01 데이터분석을 시작하며 - 2) 구글 코랩과 주피터 노트북 (0) | 2024.01.02 |
[혼공데분] 01 데이터분석을 시작하며 - 1) 데이터 분석이란 (0) | 2024.01.02 |
Comments