머릿말
아래의 data collection을 시작으로 총 10개의 컨텐츠로 구성된 시리즈이다.
데이터 전처리 과정에서의 사용할 수 있는 도구들을 "코드"중심으로 요약해놓은 "허브"라고 볼 수 있으며 코드설명을 위해 시리즈별 초반부, 약간의 개념설명을 해 놓았다.
아래의 모든 데이터 전처리 코드는 python으로 구현했으며, 실제 데이터 전처리 시 필요한 코드만 실용적으로 정리해 놓았기때문에 기본적인 python문법과 pandas코드정도를 알고있어야 이해 가능 할 것이다.
이제 아래의 "개요" 단계를 시작으로 이 시리즈를 진행하도록 하겠다
* 이 게시물은 Data Science 핵심정리를 참고하여 작성되었습니다.
개요
수집할 데이터의 유형은 크게 아래의 3가지로 나눌 수 있다.
정형데이터 / 반정형데이터 / 비정형데이터
각 데이터 형태 별 정의되어 있는 구조가 다르기에, 수집방식도 다르다.
내용은 아래 사진에 간략히 정리해 놓았다
데이터 형태 별 수집코드
pip install beautifulsoup4 lxml requests
import requests
import lxml.etree
from bs4 import BeautifulSoup
from selenium import webdriver
1) BeautifulSoup(라이브러리) : HTML, XML 문서 파싱 후 데이터 추출
2) Requests(라이브러리) : HTTP 요청을 간편하게 보냄(인간친화적)
3) lxml(라이브러리) : XML, HTML 문서를 파싱하고 처리(C언어로 구현)
- 특징 : 매우 빠르고, 강력한 성능이 장점
4) selenium(라이브러리) : 웹 브라우저를 자동으로 제어 가능하게 도움
정형 데이터를 수집하는데 있어 여러가지 코드가 존재하나, 그 중 대표적인 방법인 "웹 스크래이핑" 방식의 코드를 설명하겠다
1) 검색어 설정
search = "스크롤하고 싶은 단어"
url = "스크롤링 할 url링크 " + search + "&start=1"
# ConnectionError방지
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/98.0.4758.102"}
2) 웹 서버에 GET 요청 / 웹 서버가 응답한 내용을 변수 response에 할당
response = requests.get(url,headers=headers)
3) HTLM 파싱(뉴스 타이틀을 가져오는 예시)
soup = BeautifulSoup(response.text, "html.parser")
# 페이지에서 뉴스 타이틀만 검색
news_titles = soup.find_all("a", {"class": "news_tit"})
# 뉴스 제목만 텍스트로 추출
for title in news_titles:
print(title.text.strip())
반정형 데이터에는 몇가지 형태가 존재하고 이에따라 수집방식이 다양하나, 그 중 JSON과 XML형식으로 되어있는 반정형 데이터를 수집하는 코드를 제시하겠다
본격적으로 아래에 코드를 설명하겠다
1) JSON 형식 / Python의 requests라이브러리 사용
import requests
# JSON 데이터를 가져올 URL 설정
url = 'https://jsonplaceholder.typicode.com/posts/1'
# request의 .get()함수를 사용하여 HTTP 요청
response = requests.get(url)
# response의 .json()함수를 사용하여 데이터 파싱
json_data = response.json()
# 파싱된 데이터 출력
print(json_data)
2) XLM형식 / xml.etree.ElementTree 모듈 사용
import requests
import xml.etree.ElementTree as ET
# XML 데이터를 가져올 URL 설정
url = 'https://www.example.com/data.xml'
# requests의 .get()함수를 사용하여 HTTP 요청 보내기
response = requests.get(url)
# ET의 .fromstring()함수를 사용하여 XML 데이터 파싱
root = ET.fromstring(response.content)
# 원하는 엘리먼트 찾기
for item in root.findall('.//item'):
title = item.find('title').text
description = item.find('description').text
print(f'Title: {title}, Description: {description}')
from selenium import webdriver
url = 'https://example.com'
driver = webdriver.Chrome() # 또는 다른 웹 드라이버를 선택
driver.get(url)
# 필요한 작업 수행(아래는 모든 링크의 텍스트 출력하는 예시)
for link in driver.find_elements_by_tag_name('a'):
print(link.text)
driver.quit() # webdriver종료하고 브라우저를 닫는 함수