코딩하는 해맑은 거북이
인공지능(AI) 기초 다지기 (5) 본문
본 게시물의 내용은 '인공지능(AI) 기초 다지기(부스트코스)' 강의를 듣고 작성하였다.
해당 글은 2-2. 파이썬으로 데이터 다루기 2가지 파트를 다룬다.
1. File / Exception / Log Handling
2. Python data handling
1. File / Exception / Log Handling
- Exception
1) 예상 가능한 예외
- 발생 여부를 사전에 인지할 수 있는 예외
- 사용자의 잘못된 입력, 파일 호출 시 파일 없음
- 개발자가 반드시 명시적으로 정의 해야함
2) 예상 불가능한 예외
- 인터프리터 과정에서 발생하는 예외, 개발자 실수
- 리스트의 범위를 넘어가는 값 호출, 정수 0으로 나눔
- 수행 불가시 인터프리터가 자동 호출
- Exception Handling, 예외 처리
: 예외가 발생할 경우 후속 조치 등 대처 필요, 프로그램=제품이므로 모든 잘못된 상황에 대처가 필요하다.
* 파이썬의 예외처리
- try ~ except 문법
- exception의 종류
Built-in Exception : 기본적으로 제공하는 예외
Exception 이름 | 내용 |
IndexError | List의 Index 범위를 넘어갈 때 |
NameError | 존재하지 않은 변수를 호출 할 때 |
ZeroDivisionError | 0으로 숫자를 나눌 때 |
ValueError | 변환할 수 없는 문자/숫자를 변환할 때 |
FileNotFoundError | 존재하지 않는 파일을 호출할 때 |
- try ~ except ~ else
- try ~ except ~ finally
- raise 구문
: 필요에 따라 강제로 Exception을 발생
- assert 구문
: 특정 조건에 만족하지 않을 경우 예외 발생
- File Handling
* 파일의 종류
- 컴퓨터는 text 파일을 처리하기 위해 binary 파일로 변환시킴 (예: pyc파일)
- 모든 text 파일도 실제는 binary 파일, ASCII/Unicode 문자열 집합으로 저장되어 사람이 읽을 수 있음
Binary 파일 | Text 파일 |
- 컴퓨터만 이해할 수 있는 형태인 이진(법)형식으로 저장된 파일 - 일반적으로 메모장으로 열면 내용이 깨져 보임 (메모장 해설 불가) - 엑셀파일, 워드 파일 등등 |
- 인간도 이해할 수 있는 형태인 문자열 형식으로 저장된 파일 - 메모장으로 열면 내용 확인 가능 - 메모장에 저장된 파일, HTML 파일, 파이썬 코드 파일 등 |
* Python File I/O
- open, close
파일열기모드 | 설명 |
r | 읽기모드 - 파일을 읽기만 할 때 사용 |
w | 쓰기모드 - 파일에 내용을 쓸 때 사용 |
a | 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용 |
- read, with 구문, readlines(), readline()
read() : txt 파일 안에 있는 내용을 문자열로 반환
with ~ as구문과 함께 사용하기
readlines() : 한 줄씩 읽어 List Type으로 반환함
readline() : 실행 시 마다 한 줄 씩 읽어 오기
- directory
os 모듈을 사용하여 Directory 다루기
최근에는 pathlib 모듈을 사용하여 path를 객체로 다룸
- Pickle
- 파이썬의 객체를 영속화(persistence)하는 built-in 객체
- 데이터, object 등 실행중 정보를 저장불러와서 사용
- 저장해야하는 정보, 계산 결과(모델) 등 활용이 많음
- Logging Handling
* 로그 남기기 - Logging
- 프로그램이 실행되는 동안 일어나는 정보를 기록을 남기기
- 유저의 접근, 프로그램의 Exception, 특정 함수의 사용
- Console 화면에 출력, 파일에 남기기, DB에 남기기 등등
- 기록된 로그를 분석하여 의미있는 결과를 도출 할 수 있음
- 실행시점에서 남겨야 하는 기록, 개발시점에서 남겨야하는 기록
cf) print vs logging
기록을 print로 남기는 것도 가능함. 그러나 Console 창에만 남기는 기록은 분석시 사용불가
때로는 레벨별(개발, 운영)로 기록을 남길 필요도 있음. 또한, 모듈별로 별도의 logging을 남길필요도 있음
즉, 이러한 기능을 체계적으로 지원하는 모듈이 필요함
* logging 모듈
- Python의 기본 Log 관리 모듈 → import logging
* logging level
- 프로그램 진행 상황에 따라 다른 Level의 Log를 출력함
- 개발 시점, 운영 시점 마다 다른 Log가 남을 수 있도록 지원함
- DEBUG > INFO > WARNING > ERROR > CRITICAL
- Log 관리시 가장 기본이 되는 설정 정보
Level | 개요 | 예시 |
debug | 개발시 처리 기록을 남겨야하는 로그 정보를 남김 | - 다음 함수로 A 를 호출함 - 변수 A 를 무엇으로 변경함 |
info | 처리가 진행되는 동안의 정보를 알림 | 서버가 시작되었음 - 서버가 종료됨 - 사용자 A가 프로그램에 접속함 |
warning | 사용자가 잘못 입력한 정보나 처리는 가능하나 원래 개발시 의도치 않는 정보가 들어왔을 때 알림 | - Str입력을 기대했으나, Int가 입력됨 ≫ Str casting으로 처리함 - 함수에 argument로 이차원 리스트를 기대했으나 ≫ 일차원 리스트가 들어옴, 이차원으로 변환후 처리 |
error | 잘못된 처리로 인해 에러가 났으나, 프로그램은 동작할 수 있음을 알림 | - 파일에 기록을 해야하는데 파일이 없음 ≫ Exception 처리후 사용자에게 알림 - 외부서비스와 연결 불가 |
critical | 잘못된 처리로 데이터 손실이나 더이상 프로그램이 동작할 수 없음을 알림 | - 잘못된 접근으로 해당 파일이 삭제됨 - 사용자의 의한 강제 종료 |
cf) 실제 프로그램을 실행할 땐 데이터 파일 위치, 파일 저장 장소, Operation Type 등 여러 설정이 필요하다.
이러한 정보를 설정해 줄 방법이 필요함 → configparser(파일에), argparser(실행시점에)
* configparser
- 프로그램의 실행 설정을 file에 저장함
- Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
- 설정파일을 Dict Type으로 호출후 사용
* argparser
- Console 창에서 프로그램 실행시 Setting 정보를 저장함
- 거의 모든 Console 기반 Python 프로그램 기본으로 제공
- 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse를 사용
- Command-Line Option 이라고 부름
* Logging 적용하기
Logging formmater : Log의 결과값의 format을 지정해줄 수 있음
Log config file
2. Python data handling
- Comma Separate Value
- CSV, 필드를 쉼표(,)로 구분한 텍스트 파일
- 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식이라고 생각하면 쉬움
- 탭(TSV), 빈칸(SSV) 등으로 구분해서 만들기도 함
- 통칭하여 character-separated values (CSV) 부름
- 엑셀에서는 “다름 이름 저장” 기능으로 사용 가능
* CSV 객체 활용
Attribute | Default | Meaning |
delimiter | , | 글자를 나누는 기준 |
lineterminator | \r\n | 줄 바꿈 기준 |
quotechar | " | 문자열을 둘러싸는 신호 문자 |
quoting | QUOTE_MINIMAL | 데이터 나누는 기준이 quotechar에 의해 둘러싸인 레벨 |
- Web
- World Wide Web(WWW), 줄여서 웹이라고 부름
- 우리가 늘 쓰는 인터넷 공간의 정식 명칭
- 팀 버너스리에 의해 1989년 처음 제안되었으며, 원래는 물리학자들간 정보 교환을 위해 사용됨
- 데이터 송수신을 위한 HTTP 프로토콜 사용, 데이터를 표시하기 위해 HTML 형식을 사용
* Web은 어떻게 동작하는가?
- HTML(Hyper Text Markup Language)
- 웹 상의 정보를 구조적으로 표현하기 위한 언어
- 제목, 단락, 링크 등 요소 표시를 위해 Tag를 사용
- 모든 요소들은 꺾쇠 괄호 안에 둘러 쌓여 있음
<title> Hello, World </title> #제목 요소, 값은 Hello, World
- 모든 HTML은 트리 모양의 포함관계를 가짐
- 일반적으로 웹 페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹 브라우저가 해석/표시
* 왜 웹을 알아야 하는가?
- 정보의 보고, 많은 데이터들이 웹을 통해 공유됨
- HTML도 일종의 프로그램, 페이지 생성 규칙이 있음 : 규칙을 분석하여 데이터의 추출이 가능
- 추출된 데이터를 바탕으로 하여 다양한 분석이 가능
* 정규식 (regular expression)
- 정규 표현식, regexp 또는 regex 등으로 불림
- 복잡한 문자열 패턴을 정의하는 문자 표현 공식
- 특정한 규칙을 가진 문자열의 집합을 추출
- 주민등록 번호, 전화번호, 도서 ISBN 등 형식이 있는 문자열을 원본 문자열로부터 추출함
- HTML역시 tag를 사용한 일정한 형식이 존재하여 정규식으로 추출이 용이함
- 관련자료 : https://www.nextree.co.kr/p4327/
- 정규식 연습장 : https://regexr.com/
* 정규식 기본 문법
- 문자 클래스 [ ] : [ 와 ] 사이의 문자들과 매치라는 의미. 예) [abc] : 해당 글자가 a, b, c 중 하나가 있다.
- "-" 를 사용해서 범위를 지정할 수 있음. 예) [a-zA-z] : 알파벳 전체, [0-9] : 숫자 전체
* 정규식 기본 문법 - 메타 문자
: 정규식 표현을 위해 원래 의미 X, 다른 용도로 사용되는 문자
. | 줄바꿈 문자인 \n를 제외한 모든 문자와 매치 |
* | 앞에 있는 글자를 반복해서 나올 수 있음 |
+ | 앞에 있는 글자를 최소 1회 이상 반복 |
{m.n} | 반복 횟수를 지정 |
? | 반복 횟수가 1회 |
| | or |
^ | not |
- eXtensible Markup Language, XML
- 데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어
- TAG와 TAG사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음
- HTML과 문법이 비슷, 대표적인 데이터 저장 방식
- 정보의 구조에 대한 정보인 스키마와 DTD 등으로 정보에 대한 정보(메타정보)가 표현되며,
용도에 따라 다양한 형태로 변경가능
- XML은 컴퓨터(예: PC ↔ 스마트폰)간에 정보를 주고받기 매우 유용한 저장 방식으로 쓰이고 있음
* XML Parsing in Python
- XML도 HTML과 같이 구조적 markup 언어
- 정규표현식으로 Parsing이 가능함. 그러나, 좀 더 손쉬운 도구들이 개발되어 있음
→ 가장 많이 쓰이는 parser인 beautifulsoup으로 파싱
* BeautifulSoup
- HTML, XML등 Markup 언어 Scraping을 위한 대표적인 도구
- lxml 과 html5lib 과 같은 Parser를 사용함
- 속도는 상대적으로 느리나 간편히 사용할 수 있음
- https://www.crummy.com/software/BeautifulSoup/
- JavaScript Object Notation, JSON
- 원래 웹 언어인 Java Script의 데이터 객체 표현 방식
- 간결성으로 기계/인간이 모두 이해하기 편함
- 데이터 용량이 적고, Code 로의 전환이 쉬움
- 이로 인해 XML의 대체제로 많이 활용되고 있음
* JSON in Python
- json 모듈을 사용하여 손 쉽게 파싱 및 저장 가능
- 데이터 저장 및 읽기는 dict type과 상호 호환 가능
- 웹에서 제공하는 API는 대부분 정보 교환 시 JSON 활용
- 페이스북, 트위터, Github 등 거의 모든 사이트
- 각 사이트 마다 Developer API의 활용법을 찾아 사용
- JSON Read : JSON 파일의 구조를 확인 → 읽어온 후 → Dict Type 처럼 처리
- JSON Write : Dict Type으로 데이터 저장 → josn모듈로 Write
'AI' 카테고리의 다른 글
인공지능(AI) 기초 다지기 (7) (0) | 2022.12.19 |
---|---|
인공지능(AI) 기초 다지기 (6) (0) | 2022.12.19 |
인공지능(AI) 기초 다지기 (4) (0) | 2022.12.17 |
인공지능(AI) 기초 다지기 (3) (0) | 2022.12.13 |
인공지능(AI) 기초 다지기 (2) (0) | 2022.12.12 |