[Day 5]

Dongbin Lee·2021년 1월 22일
0

2021부캠AI

목록 보기
3/24

2021 부스트캠프 Day5

[Day 5] 파이썬으로 데이터 다루기


Exception / File / Log Handling

사소하지만, 모르면 프로그래밍시 힘들 수 있다.


Exception

1) 예상 가능한 예외

  • 발생 여부를 사전에 인지할 수 있는 예외
  • 개발자가 반드시 명시적으로 정의

2) 예상이 불가능한 예외

  • 인터프리터 과정에서 발생하는 예외, 개발자 실수
  • 수행 불가시 인터프리터가 자동 호출

예외 처리(Exception Handling)

  • 예외가 발생할 경우 후속 조치 등 대처 필요
    1) 없는 파일 호출 -> 파일 없음을 알림
    2) 게임 이상 종료 -> 게임 정보 저장

Exceptino Handling

  • try ~ except 문법
try:
	# 예외 발생 코드
except<Exception Type>:
	# 예외 발생시 대응하는 코드
  • Built-in Exception : 기본적으로 제공하는 예외
    1) IndexError : List의 Index 범위를 넘어갈 때
    2) NameError : 존재하지 않은 변수를 호출 할 때
    3) ZeroDivisionError : 0으로 숫자를 나눌 때
    4) ValueError : 변환할 수 없는 문자/숫자를 변환할 때
    5) FileNotFoundError : 존재하지 않는 파일을 호출할 때

  • try ~ except ~ else

try:
	# 예외 발생 가능 코드
except <Exception Type> :
	# 예외 발생시 동작하는 코드
else:
	# 예외가 발생하지 않을 떄 동작하는 코드
  • try ~ except ~ finally
try:
	# 예외 발생 가능 코드
except <Exception Type>:
	# 예외 발생시 동작하는 코드
finally:
	# 예외 발생 여부와 상관없이 실행됨
  • raise : 필요에 따라 강제로 Exception을 발생
while True:
	value = input("변환할 정수 값을 입력해주세요.")
    	for digit in value:
    		if digit not in "0123456789":
            		raise ValueError("숫자값을 입력하지 않으셨습니다")
		print("정수값으로 변환된 숫자 -", int value)
  • assert : 특정 조건에 만족하지 않을 경우 예외 발생
def get_binary_nmubmer(decimal_number):
	assert isinstance(decimal_number, int)
	return bin(decimal_number)

print(get_binary_nmubmer(10))

File Handling

  • 기본적인 파일 종류로 text파일과 binary파일로 나눔
  • 컴퓨터는 text파일을 처리하기 위해 binary 파일로 변환시킴

Python File I/O

  • 파이썬은 파일 처리를 위해 open 키워드를 사용함
 f = open("<파일이름>", "접근 모드") # 접근모드 'r' : 읽기모드, 'w' : 쓰기모드, 'a' : 추가모드
 f.close()
  • read() : txt파일 안에 있는 내용을 문자열로 반환
f = open("i_have_a_draem.txt", "r")
contents = f.read()
print(contents)
f.close()
  • with 구문과 함께 사용하기
with open("i_have_a_dream.txt", "r") as my_file:
	contents = my_file.read()
	print (type(contents), contents)
  • with and readlines()
with open("i_have_a_dream.txt", "r") as my_file:
	content_list = my_file.readlines() #파일 전체를 list로 반환
	print(type(content_list)) #Type 확인
	print(content_list) #리스트 값 출력

Python의 directory 다루기

  • os모듈을 사용하여 Directory 다루기
import os
os.mkdir("log")
  • 디렉토리가 있는지 확인
if not os.path.isdir("log"):
	os.mkdir("log")
  • 최근에는 pathlib 모듈을 사용하여 path 를 객체로 다룸

Pickle

  • 파이썬의 객체를 영속화(persistence)하는 built-in 객체
  • 데이터, object 등 실행 중 정보를 저장 -> 불러와서 사용
  • 저장해야하는 정보, 계산 결과(모델) 등 활용이 많음
  • .pickle 파일은 파이썬을 위한 바이너리 파일
import pickle
f = open("list.pickle", "wb")
test = [1, 2, 3, 4, 5]
pickle.dump(test, f)
f.close()

f = open("list.pickle", "rb")
test_pickle = pickle.load(f)
print(test_pickle)
f.close()

Loggin Handling

  • 프로그램이 실행되는 동안 일어나는 정보를 기록.
  • 유저의 접근, 프로그램의 Exception, 특정 함수의 사용
  • 기록된 로그를 분석하여 의미있는 결과를 도출 할 수 있음
  • 실행시점 남겨야 하는 기록, 개발시점에서 남겨야 하는 기록
  • 레벨별(개발, 운영), 모듈별 별도의 logging을 남길 필요도 있음

logging 모듈

  • Python의 기본 Log관리 모듈
import logging
logging.debug("틀렸잖아!")
logging.info("확인해!")
logging.warning("조심해!")
logging.error("에러났어!")
logging.critical("망했다....")
  • logging level : 프로그램 진행 상황에 따라 다른 Level의 Log를 출력
    -> DEBUG > INFO > WARNING > ERROR > Critical
import logging
logger = logging.getLogger("main") # Logger 선언
stream_hander = logging.StreamHandler() # Logger의 output 방법 선언
logger.addHandler(stream_hander) #Logger의 output 등록

logger.setLevel(logging.DEBUG)
logger.debug("틀렸잖아!!")
logger.info("확인해!!")
logger.warning("조심해!!")
logger.error("에러났어!!!")
logger.critical("망했다...")

logger.setLevel(logging.CRITICAL)
logger.debug("틀렸잖아!!")
logger.info("확인해!!")
logger.warning("조심해!!")
logger.error("에러났어!!!")
logger.critical("망했다...")

configparser

  • 프로그램의 실행 설정을 file에 저장함
  • Section, Key, Value 값의 형태로 설정된 설정 파일을 사용
  • 설정 파일을 Dict Type으로 호출 후 사용
import configparser
config = configparser.ConfigParser()
config.sections()

config.read('example.cfg')
config.sections()

for key in config['SectionOne']:
	print(key)
    
config['SectionOne']["status"]
[SectionOne]
Status: Single
Name: Derek
Value: Yes
Age: 30
Single: True

[SectionTwo]
FavoriteColor = Green

[SectionThree]
FamilyName: Johnson

argparser

  • Console 창에서 프로그램 실행시 Setting 정보를 저장함
  • 거의 모든 Console 기반 Python 프로그램 기본으로 제공
  • 특수 모듈도 많이 존재하지만(TF), 일반적으로 argparse를 사용
  • Command-Line Option 이라고 부름
import argparse
parser = argparse.ArgumentParser(description='Sum two integers.')
parser.add_argument('-a', "--a_value", dest=”A_value", help="A integers", type=int)
parser.add_argument('-b', "--b_value", dest=”B_value", help="B integers", type=int)

args = parser.parse_args()
print(args)
print(args.a)
print(args.b)
print(args.a + args.b)

Python Data Handling

CSV, 웹(Html), XML, JSON
빅데이터, 데이터분석 회사에서 인턴을 하며 크롤링, 데이터분석 을 했던 경험이 있어서 내가 아는 지식을 다시 복기하는 자세로 수강했다.

CSV(Comma Separate Value)

  • 엑셀 양식의 데이터를 프로그램에 상관없이 쓰기 위한 데이터 형식
  • CSV 객체로 CSV 처리
    • Text파일 형태로 데이터 처리시 문장 내에 들어가 있는 , 등에 대해 전처리 과정이 필요
import csv
reader = csv.reader(f, delimiter=',', quotechar='"',quoting=csv.QUOTE_ALL)

delimiter : 글자를 나누는 기준
lineterminator : 줄 바꿈 기준
quotechar : 문자열을 둘러싸는 신호 문자
quoting : 데이터 나누는 기준이 quotechar에 의해 둘러싸인 레벨

HTML(Web)

  • 웹 상의 정보를 구조적으로 표현
  • Tag를 사용, 꺽쇠<> 괄호 안에 둘러 쌓여 있음

정규식(regular expression)

  • 복잡한 문자열 패턴을 정의하는 문자 표현 공식
  • 특정한 규칙을 가진 문자열의 집합을 추출
  • re 모듈을 import하여 사용
  • 함수 : search 한개만 찾기, findall 전체 찾기
  • 추출된 패턴은 tuple로 반환됨

XML(eXtensible Markup Language)

  • 데이터의 구조와 의미를 사용하는 TAG(MarkUp)를 사용하여 표시
  • TAG와 TAG사이에 값이 표시, 구조적인 정보를 표현
  • BeautifulSoup으로 파싱

JSON(JavaScript Object Notation)

  • Java Script의 데이터 객체 표현 방식
  • 간결성, 데이터 용량이 적고, Code로의 전환이 쉬움
  • XML의 대체제로 많이 활용
  • 데이터 저장 및 읽기는 dict type과 상호 호환
  • 웹에서 제공하는 API는 대부분 정보 교환 시 JSON 활용
profile
Preparation student who dreams of becoming an AI engineer.

0개의 댓글