중앙백 2021. 12. 5. 22:54

데이터 저장 방식 : 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

 

 

 

** 어렵다... 강의 끝나고 다시 한번 실습하면서 제대로 이해하자.