Python/[코칭스터디 9기] 인공지능 AI 기초 다지기

[인공지능(AI) 기초 다지기] 2. 파이썬 다지기 (4)

김초송 2023. 1. 30. 18:22

Python Data Handling

 

- CSV (Comma separate Value)

  • 필드를 쉼표(,)로 구분한 텍스트 파일
  • 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식
  • 탭(TSV), 빈칸(SSV) 등으로 구분하기도 함
  • 통칭하여 character-separated values(CSV)로 부름
  • 파이썬에서는 일반 텍스트 파일처럼 한 줄 씩 데이터를 처리함
  • csv 객체
    • 문장 내에 들어가 있는 , 등에 대해 전처리 과정 필요
    • 간단한 csv 파일 처리 지원
import csv
reader = csv.reader(f,
         delimiter=',', quotechar='"',
         quoting=csv.QUOTE_ALL)
Attribute Default Meaning
delimiter , 글자를 나누는 기준
lineterminator \r\n 줄 바꿈 기준
quotechar " 문자열을 둘러싸는 신호 문자 (하나의 문장임을 표시)
quoting QUOTE_MINIMAL 데이터를 나누는 기준이 quotechar에 의해 둘러싸인 레벨

 

- HTML (Hyper Text Markup Language)

  • 웹 상의 정보를 구조적으로 표현하기 위한 언어
  • 제목, 단락, 링크 등 요소 표시를 위해 Tag 사용
  • 모든 요소들은 꺾쇠 괄호 안에 둘러 쌓여 있음
    <title> Hello, World </title>  => Markup Language
  • 모든 HTML은 트리 모양의 포함관계를 가짐
  • 일반적으로 웹 페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹 브라우저가 해석/표시
    web : 요청 -> 처리 -> 응답 -> 렌더링
  • <html> - <head> - <title> 
                - <body> - <p>
  • Element, Attribute Value로 이루어짐
  • 페이지 생성 규칙이 있음 -> 규칙을 분석하여 데이터 추출 가능 (크롤링) -> 추출된 데이터로 다양한 분석 가능

 

- Regular Expression (정규식)

  • 정규 표현식, regexp 또는 regex 로 불림
  • 복잡한 문자열 패턴을 정의하는 문자 표현 공식
  • 특정한 규칙을 가진 문자열의 집합을 추출
  • HTML parsing 정규식
    • 주민등록번호, 전화번호, 도서 ISBN 등 형식이 있는 문자열을 원본 문자열로부터 추출함
    • HTML 역시 tag를 사용한 일정한 형식이 존재하여 정규식으로 추출이 용이
  • 정규식 연습장 : http://www.regexr.com/
# 이메일
^[a-zA-Z0-9]+@[a-zA-Z0-9]+$
^[_0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[_0-9a-zA-Z-]+)*$

# 휴대폰 번호
^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

# 일반 번호
^\d{2,3} - \d{3,4} - \d{4}$

# 주민등록번호
\d{6} \- [1-4]\d{6}

# IP 주소
([0-9]{1,3})\. ([0-9]{1,3})\. ([0-9]{1,3})\. ([0-9]{1,3})
  • [ ] : 대괄호 사이의 문자들과 매치
    [abc] : 해당 글자가 a, b, c 중 하나가 있다
  • - : 사용 범위 지정
    [a-zA-Z] : 알파벳 전체
  • 메타 문자로 안 쓰고 싶을 땐 앞에 \(역슬래시) 붙임
메타 문자 정규식 표현을 위해 원래 의미가 아닌 다른 용도로 사용되는 문자
. 줄바꿈 문자인 \n을 제외한 모든 문자와 매치
* 앞에 있는 글자를 0회 이상 반복
+ 앞에 있는 글자를 최소 1회 이상 반복
{m, n} 반복 횟수를 지정
? 반복 횟수가 1회
| or
^ not

 

- eXtensible Markup Language (XML)

  • 데이터의 구조와 의미를 설명하는 TAG(<>, MarkUp Language)를 사용하여 표시하는 언어
  • tag와 tag 사이에 값이 표시됨, 구조적인 정보 표현
  • HTML과 비슷한 문법, 대표적인 데이터 저장 방식
  • 컴퓨터 간에 정보를 주고 받기 매우 유용한 저장 방식
  • 정규표현식으로 Parsing 가능
  • 가장 많이 쓰이는 parser인 beautifulsoup으로 파싱

 

- BeatifulSoup

  • 모듈 호출 : from bs4 import BeautifulSoup
  • 객체 생성 : soup = BeautifulSoup(xml, "lxml")
  • find_all : 정규식과 마찬가지로 해당 패턴을 모두 반환
  • get_text() : 반환된 패턴의 값 반환 (<></> 사이의 값)

 

- JavaScript Object Notation (JSON)

  • JavaScript의 데이터 객체 표현 방식
  • Key : Value 쌍으로 데이터 표시
  • 간결성으로 기계/인간 모두 이해하기 편함
  • 데이터 용량이 적고, 코드 전환이 쉬움 -> xml보다 훨씬 간결하고 dict 타입
  • XML 대체제로 많이 활용
  • 모듈을 사용하여 손쉽게 파싱 및 저장 가능
  • 데이터 젖아 및 읽기는 dict type과 상호 호환 가능
  • 웹에서 제공하는 API 대부분이 JSON 활용
  • 페이스북, 트위터, Github 등 대부분 사이트 -> 각 사이트 마다 Developer API
  • 파일 구조 확인 -> read -> Dict type처럼 처리 
  • .read() : string type
  • .load() : dict type으로 읽어옴
  • .dump() : json write