[혼자 공부하는 데이터 분석 ] 데이터 수집하기

이영락·2024년 8월 26일
0

인공지능 공부

목록 보기
2/33

데이터 수집하기

목차

  1. API 사용하기
  2. 웹스크래핑

🏖️ API 사용하기

API란?

: 두 프로그램이 서로 대화하기 위한 방법을 정의한 것

웹 페이지를 전송하기 위한 통신 규약 : HTTP

: 인터넷에서 웹 페이지를 전송하는 기본 통신 방법

  • 웹 서버 소프트웨어를 사용해 웹 페이지를 서비스 ex) 엔진엑스(NGINNX), 아파치(Apache)
  • 웹브라우저와 HTTP란 프로토콜(통신규약)로 통신

comment!: HTTP 프로토콜을 사용해 API를 만드는 것이 웹 기반 API

웹 페이지를 전송하기 위한 통신 규약 : HTML

: 웹 브라우저가 화면에 표시할 수 있는 문서의 한 종류이자 웹 페이지를 위한 표준 언어

  • 마크업 언어
  • 태그 : <div>와 같은 표시
  • 웹 기반 API는 일반적으로 csv,JSON,XML 파일을 사용 -> HTML은 구조가 비교적 복잡하기 때문
  • 데이터가 복잡한 구조이면 버그가 생길 가능성이 많음!

파이썬에서 JSON 데이터 다루기

JSON

: JavaScript Object Notation

  • 파이썬의 딕셔너리와 리스트를 중첩해놓은것과 비슷
  • 중괄호 {}를 사용
  • 키와 값을 콜론:으로 연결
d = {"name" : "혼자 공부하는 데이터 분석}
print(d['name'])

파이썬 객체를 JSON 문자열로 변환하기 : json.dumps()함수

json package 임포트 코드

import json

파이썬 객체를 JSON 형식으로 변형

d_str = json.dumps(d, ensure_ascill = False)
print(d_str)
  • ensure_ascill = False : 한글이 포함되어 있어 원래 저장된 문자를 그대로 출력(아스키 문자 외에는 원래는 16진수로 표현)

JSON 문자열을 파이썬 객체로 변환하기 : json.loads() 함수

파이썬 객체를 JSON 형식으로 변형

d2 = json.loads(d_str)
print(d2['name'])
d4_str = """
[  
 {"name" : "혼자 공부하는 데이터 분석}, "author" : "박혜선", "year" : 2022},
 {"name" : "혼자 공부하는 머신러닝}, "author" : "박혜선", "year" : 2020 }
  
]  
"""
d4 = json.loads(d4_str)
print(d4[0]['name'])

JSON 문자열을 데이터프레임으로 변환하기 : read_json() 함수

import pandas as pd
pd.read_json(d4_str)

파이썬에서 XML 데이터 다루기

XML : eXtensible Markup Language

  • 엘리먼트 : 계층 구조를 이루면서 정보 표현
    • 시작태그와 종료태그로 감쌈
    • 태그는 <기호로 시작해서> 기로호로 끝나면 태그 이름은 영문자와 숫자 사용
    • 시작태그와 종료태크는 이름은 같아야함

XML 문자열을 파이썬 객체로 변환하기 : fromstring() 함수

  1. xml.etree.ElementTree 모듈의 fromstring() 사용
  x_str = """
<book>
    <name>혼자 공부하는 데이터 분석</name>
    <author>박해선</author>
    <year>2022</year>
</book>
"""
import xml.etree.ElementTree as et

book = et.fromstring(x_str)

자식 엘리먼트 확인하기 : findtext() 매서드

book_childs = list(book)

print(book_childs)
name, author, year = book_childs

print(name.text)
print(author.text)
print(year.text)

자동으로 자식 엘리먼트를 탐색하여 텍스트를 반환

name = book.findtext('name')
author = book.findtext('author')
year = book.findtext('year')

print(name)
print(author)
print(year)

여러 개의 자식 엘리먼트 확인하기 : findall() 매서드와 for 문

동일한 이름을 가진 여러 개의 자식 엘리먼트를 찾을 때는 : findall() 매서드와 for문 함께 사용

for book in books.findall('book'):
    name = book.findtext('name')
    author = book.findtext('author')
    year = book.findtext('year')

    print(name)
    print(author)
    print(year)
    print()

API로 20대가 가장 좋아하는 도서 찾기

import requests
# 인증키를 발급받아 문자열 맨 끝에 추가해 주세요.
url = "http://data4library.kr/api/loanItemSrch?format=json&startDt=2021-04-01&endDt=2021-04-30&age=20&authKey=c01ec15e4574f74ee45cba2601bad15b82971e606e3b0740977ee4b363ce2fe2"
r = requests.get(url)
data = r.json()

print(data)
  
data['response']['docs']
  
books = []
for d in data['response']['docs']:
    books.append(d['doc'])
books = [d['doc'] for d in data['response']['docs']]
books
  
books_df = pd.DataFrame(books)

books_df

파이썬으로 API 호출하기 : requests 패키지

profile
AI Engineer / 의료인공지능

0개의 댓글

관련 채용 정보