5. Python Data Handling
데이터 저장 방식 : CSV, 웹(html), XML, JSON 등
1. Comma seperate Values(CSV)
- CSV, 필드를 쉼표(,)로 구분한 텍스트 파일
- 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터형식
- 탭(TSV), 빈칸(SSV) 등으로 구분해서 만들기도 함
- 통칭하여 character-separated values(CSV) 부름
- 엑셀에서는 "다른 이름 저장" 기능으로 사용 가능(CSV 쉼표로 분리)
* 파이썬으로 CSV 파일 읽기/쓰기
- 일반적 textfile을 처리하듯 파일을 읽어온 후, 한 줄 한 줄씩 데이터를 처리함.
* CSV 객체로 CSV 처리
- Text파일 형태로 데이터 처리시 문장 내에 들어가 있는 ","등에 대해 전처리 과정이 필요
- 파이썬에서는 간단히 CSV파일을 처리하기 위해 csv 객체를 제공함
- 인코딩에 신경 쓰자. 윈도우는 cp949일 경우가 많다. 혹은 utf8
import csv
reader = csv.reader(f,delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
delimiter(default: , ) 글자를 나누는 기준
lineterminator(default \r\n) 줄바꿈기준
quotechar(default ") 문자열을 둘러싸는 신호 문자
quoting(default QUOTE_ALL) 데이터 나누는 기준이 quotechar에 의해 둘러싸인 레벨
2. Web
- World Wide Web(WWW) 줄여서 웹이라고 부름
- 우리가 늘 쓰는 인터넷 공간의 정식 명칭
- 데이터 송수신을 위한 HTTP 프로토콜 사용, 데이터를 표시하기 위해 HTML 형식을 사용.
* Web 동작구조
(1) 요청 : 웹주소, Form, Header 등
(2) 처리 : Database 처리 등 요청 대응
(3) 응답 : HTML, XML 등으로 결과 반환
(4) 렌더링 : HTML, XML 표시
* HTML(Hyper Text Markup Language)
- 웹 상의 정보를 구조적으로 표현하기 위한 언어
- 제목, 단락, 링크 등 요소 표시를 위해 Tag(< >)를 사용
- 모든 요소들은 꺾쇠 괄호 안에 둘러 쌓여 있음
<title> Hello, World </title> # 제목 요소, 값은 Hello, World
- 모든 HTML은 트리 모양의 포함관계를 가짐
- 일반적으로 웹 페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹 브라우저가 해석/표시
* 왜 웹을 알아야 하는가?
- 정보의 보고, 많은 데이터들이 웹을 통해 공유됨
- HTML도 일종의 프로그램, 페이지 생성 규칙이 있음 : 규칙 분석해서 데이터 추출 가능
- 추출된 데이터를 바탕으로 다양한 분석 가능
* 정규식(regular expression)
- 정규 표현식, regexp 또는 regex 등으로 불림
- 복잡한 문자열 패턴을 정의하는 문자 표현 공식
- 특정한 규칙을 가진 문자열의 집합을 추출
(예) 010-0000-0000 , 203.252.101.40
* 정규식 for HTML Parsing
- 주민등록 번호, 전화번호, 도서 ISBN 등 형식이 있는 문자열을 원본 문자열로부터 추출
- HTML 역시 tag를 사용한 일정한 형식이 존재하여 정규식으로 추출이 용이함
- 문법이 방대해서 인터넷을 통해 스스로 찾아서 공부해야 함
- www.regexr.com : 정규식 연습장 에서 연습 가능
* 정규식 기본 문법
- 문자 클래스 [ ] : [와 ]사이의 문자들과 매치라는 의미
(예) [abc] : 해당 글자가 a,b,c중 하나가 있다.
[a-zA-z] : 알파벳 전체. [0-9] : 숫자 전체
- 메타 문자 : 정규식 표현을 위해 원래 의미와 다르게 쓰이는 문자
. : 줄바꿈 문자인 \n을 제외한 모든 문자와 매치 (예) a[.]b
* : 앞에 있는 글자를 반복해서 나올 수 있음
tomor*ow -> tomorrow tomoow tomorrrrow
+ : 앞에 있는 글자를 최소 1회 이상 반복
{m.n} : 반복 횟수를 지정 (예){1,}, {0,} {1,3} [0-9]{1,3}
? : 반복 횟수가 1회
| : or
^ : not
* 정규식 in python
- re 모듈을 import해 사용
- 함수: search - 한 개만 찾기, findall - 전체 찾기
- 추출된 패턴은 tuple로 반환됨
3. eXtensible Markup Language(XML)
- 데이터의 구조와 의미를 설명하는 TAG(MarkUp)을 사용하여 표시하는 언어
- TAG와 TAG사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음
- HTML과 문법이 비슷, 대표적인 데이터 저장 방식
- 정규표현식으로 Parsing이 가능함
- 그러나 좀 더 손쉬운 도구들이 개발되어 있음
- 가장 많이 쓰이는 parser인 beautifulsoup으로 파싱
* BeautifulSoup
- HTML, XML등 Markup언어 Scarping을 위한 대표적인 도구
- lxml과 html5lib과 같은 Parser를 사용함
- 속도가 상대적으로 느리지만 간편히 사용 가능.
- conda환경에서 lxml과 beautifulsoup설치
4. JavaScript Object Notation(JSON)
- 원래 웹 언어인 Java Script의 데이터 객체 표현 방식
- 간결성으로 기계/인간이 모두 이해하기 편함
- 데이터 용량이 적고, Code로의 전환이 쉬움
- 이로 인해 XML의 대체제로 많이 활용되고 있음
- Python의 Dict Type과 유사, key : value 쌍으로 데이터 표시
* JSON in Python
- JSON 모듈을 사용하여 손 쉽게 파싱 및 저장 가능
- 데이터 저장 및 읽기는 dict type과 상호 호환 가능
- 웹에서 제공하는 API는 대부분 정보 교환 시 JSON 활용
- 페이스북, 트위터, Github 등 거의 모든 사이트
- 각 사이트마다 Developer API의 활용법을 찾아 사용
- import json 후 읽어온 다음 dict type처럼 처리 json.loads
- Write도 dict type으로 데이터 저장한 후 json모듈로 write. json.dump
** 어렵다... 강의 끝나고 다시 한번 실습하면서 제대로 이해하자.