Python data handling
CSV, 웹(html), XML, JSON
CSV (Comma Separate Value)
•
CSV, 필드를 쉽표(,)로 구분한 텍스트 파일
•
엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식
•
탭 (TSV), 빈칸 (SSV) 등으로 구분해서 만들기도 함
•
통칭하여 character-separated values (CSV) 부름
•
엑셀에서는 ‘다름이름저장' 기능으로 사용 가능
CSV 객체로 CSV 처리
•
Text 파일 형태로 데이터 처리시 문장 내에 들어가 있는 “,” 등에 대해 전처리 과정 필요
•
파이썬에서는 간단히 CSV 파일을 처리하기 위해 csv 객체를 제공함
•
시간대 / 조사일자 / 행정구역 / 날씨 등을 기준으로 연령별 / 성별 유동인가 해당 지역에 몇 명인가 표시
import csv
reader = csv.eader(f,
delimiter = ',', quotechar='"',
quoting=csv.QUOTE_ALL)
Python
복사
encoding 신경써라!
encoding="cp949" #윈도우는 cp949일 가능성 많다
encoding="utf8" #안될때는 이걸로 바꿔라
Python
복사
WEB (World Wide Web, WWW)
•
데이터 송수신을 위한 HTTP 프로토콜 사용
•
데이터를 표시하기 위해 HTML 형식을 사용
•
정보의 보고, 많은 데이터들이 웹을 통해 공유됨
•
HTML도 일종의 프로그램, 페이지 생성 규칙이 있음
◦
규칙을 분석하여 데이터의 추출이 가능
•
추출된 데이터를 바탕으로하여 다양한 분석이 가능
정규식 (regular expression)
•
정규 표현식, regexp 또는 regex 등으로 불림
•
복잡한 문자열 패턴을 정의하는 문자 표현 공식
•
특정한 규칙을 가진 문자열의 집합을 추출
HTML
•
웹 상의 정보를 구조적으로 표현하기 위한 언어
•
제목, 단락, 링크 등 요소 표시를 위해 태그 사용
•
모든 요소들은 꺾쇠 괄호 안에 둘러 쌓여 있음
•
모든 HTML은 트리 모양의 포함 관계를 가짐
•
일반적으로 웹 페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹 브라우저가 해석 / 표시
정규식 (regular expression)
•
정규 표현식, regexp 또는 regex 등으로 불림
•
복잡한 문자열 패턴을 정의하는 문자 표현 공식
•
특정한 규칙을 가진 문자열의 집합을 추출
정규식 for HTML Parsing
•
주민등록번호, 전화번호, 도서 ISBN 등 형식이 있는 문자열을 원본 문자열로부터 추출함
•
HTML 역시 tag를 사용한 일정한 형식이 존재하여 정규식으로 추출이 용이함
•
문법 자체 매우방대, 스스로 찾아서 하는 방법 터득 중요
정규식 기본문법
•
정규식 연습장 (http://www.regexr.com/)
•
문자 클래스 [] : [와] 사이의 문자들과 매치 라는 의미
•
“-” 를 사용 범위를 지정할 수 있음
•
메타 문자
◦
정규식 표현을 위해 원래 의미 X, 다른 용도로 사용되는 문자
. ^ $ * + ? { } [ ] \ | ( )
Python
복사
◦
. : 줄바꿈 문자인 \n 을 제외한 모든 문자와 매치
◦
* : 앞에 있는 글자를 반복해서 나올 수 있음
◦
+ : 앞에 있는 글자를 최소 1회 이상 반복
◦
{m.n} : 반복 횟수를 지정
◦
? : 반복 횟수가 1회
: or
^ : not
정규식 in 파이썬
◦
re 모듈을 import 하여 사용
import re
Python
복사
◦
함수
▪
search - 한 개만 찾기
▪
findall - 전체 찾기
◦
추출된 패턴은 tuple로 반환됨
◦
연습 - 특정 페이지에서 ID만 추출하기
◦
ID 패턴 : [영문대소문자|숫자] 여러 개, 별표로 끝남
XML
◦
데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어
◦
TAG와 TAG 사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음
◦
HTML과 문법이 비슷, 대표적인 데이터 저장 방식
◦
정보의 구조에 대한 정보인 스키마와 DTD 등으로 정보에 대한 정보(메타정보)가 표현되며, 용도에 따라 다양한 형태로 변경가능
◦
XML 은 컴퓨터(이기종) 간에 정보를 주고받기 매우 유용한 저장 방식으로 쓰이고 있음
◦
XML도 HTML 과 같이 구조적 마크업 언어
◦
정규표현식으로 Parsing 이 가능함
◦
그러나 좀 더 손쉬운 도구들이 개발되어 있음
◦
가장 많이 쓰이는 parser 인 beautifulsoup 으로 파싱
Beautifulsoup
activate python_mooc
conda install lxml
conda install -c anaconda beautifulsoup4=4.5.1
Shell
복사
•
모듈 호출
from bs4 import BeautifulSoup
Python
복사
•
객체 생성
soup = BeautifulSoup(books_xml, "lxml")
Python
복사
•
Tag 찾는 함수 find_all 생성
soup.find_all("author")
Python
복사
JSON
•
JS Object Notation
•
원래 웹 언어인 자바스크립트의 데이터 객체 표현 방식
•
간결성으로 기계/인간이 모두 이해하기 편함
•
데이터 용량이 적고, 코드로의 전환이 쉬움
•
이로 인해 XML 의 대체제로 많이 활용되고 있음
JSON in Python
•
json 모듈을 사용하여 손 쉽게 파싱 및 저장 가능
•
데이터 저장 및 읽기는 dict type 과 상호 호환 가능
•
웹에서 제공하는 API 는 대부분 정보 교환 시 JSON 활용
•
페북, 트위터, 깃헙 등 거의 모든 사이트
•
각 사이트 마다 Developer API 의 활용법을 찾아 사용
•
JSON Read
◦
JSON 파일의 구조를 확인 → 읽어온 후 → Dict Type 처럼 처리
•
JSON Write
◦
Dict Type으로 데이터 저장 → json 모듈로 Write