강의 복습 내용
- 예외를 하는법
- exception
- 파이썬의 정규표현식
- 모듈 re
- 설정건들기
- configparser, argparser
- 로그를 남기는법
- logging
- 파일의 종류
- csv, xml, html, json
얻은 지식
- 여러 형태의 데이터로부터 특정 데이터를 추출하는 방식을 알아본다
- 예외를 처리하여 다양한 예외를 다룬다.
- 로그를 통해 특정 상황을 파악한다
- 로그를 저장,읽기(loggin)
- 파일을 읽고 쓰는 방식을 알 수 있다.
- 객체를 저장하고 읽는 방식(pikle)
- 설정(configparser, argparser)
- 데이터파일의 종류
- csv, xml, json, html
- 다양한 데이터 파일으로부터 데이터를 추출하는 방법
- 정규표현식
- html로 웹 크롤
예외, 파일, log handling
예외 Exception
- 예상치 못한 예외
- 발생여부를 사전에 인지 할 수 있는 예외
- 사용자의 입력이 잘못되거나, 호출할 파일이 없을때
- 개발자가 명시적으로 정의하는 예외이다.
- 예상이 불가능한 예외
- 인터프리터 과정에서 발생하는 예외
- 리스트가 넘어가는 값 호출, 정수를 0으로 나누는 경우
- 인터프리터가 자동 호출 된다고 한다.
Exception Handling
이라고 한다.
Exception Handling
- try ~ exception 문법
try:
#예외 발생 가능 코드
except <Exception Type>:
#예외 발생시 대응 코드
else: # 옵션
#예외가 발생하지 않을 때 동작하는 코드
finally: # 옵션
#예외발생 여부 상관없이 동작하는 코드
- built-in Exception 기본적으로 제공하는 예외 타입
exception 타입 | 내용 |
---|---|
IndexError | list의 범위를 벗어날때 |
NameError | 존재하지 않는 변수 호출 |
ZeroDivisionError | 0으로 나눌때 |
ValueError | 변환하지 못할때 |
FileNotFoundError | 파일을 못찾을때 |
raise
강제로 Exception을 발생# 숫자가 아니면 아예 코드가 멈추도록 if digit not in "0123456789" raise ValueError("숫자 입력해주세요")
- 이후 코드가 리소스를 많이 잡는 코드일때 사전에 공지해줄때 사용한다고 한다.
assert
특정 조건에 만족하지 않을 경우 예외발생# 입력값의 타입이 int인지 확인 assert isinstance(input:int)
file handling
- 파일의 종류
- text파일은 인간도 이해하는 문자열 형식의 파일
- 메모장에 저장된 파일
- binary파일은 컴퓨터만 이해하는 이진형식 파일
- 엑셀, 워드 같이 특정 프로그램으로 여는 파일
- text파일은 인간도 이해하는 문자열 형식의 파일
open
파일 처리f = open("파일이름","접근 모드"
- r은 읽기, w는 쓰기, a는 추가모드
- 마지막에는
f.close()
- 읽기 할때는 encoding을 맞춰주는게 좋다.
- 대부분
utf8
으로 맥과 윈도우 전부 읽을 수 있도록 한다
- 대부분
f = open("fe.txt","r")
contents = f.read()
f.close()
with open("fe.txt","r") as contents:
contents = f.read()
# 한줄 씩 list로 변환
with open("fe.txt","r") as contents:
contents = f.readlines()
# 실행하면서 한줄씩 읽기
with open("fe.txt","r") as contents:
while True:
line = f.readline() # s가 빠짐
if not line:
break
# 인코딩
f = open("fe.txt","w", encoding = "utf8")
f.write("입력 \n")
f.close()
os
모듈로 폴더를 다룰 수 있다. ```python import os폴더 생성
os.mkdir(“log”)
#디렉토리 확인 os.path.isdir(“log”)
#경로 만들때 join을 활용 os.path.join(“a”,”b.txt”) # a/b.txt로 경로 형식으로 만들어준다.
- `pathlib`모듈로 path를 다룬다.
```python
import pathlib
cwb = pathlib.Path.cwd() #현재 폴더 위치
cwd.parent # 현재 폴더의 부모
pickle
- 파이썬의 객체를 저장할때 사용
- 데이터, object등 실행중 정보를 저장(영속화 persistence)한다.
- 계산한 모델 등을 저장할때
import pickle
f = open("list.pickle","wb") # b가 추가되서 바이너리 쓰기 모드이다.
data = [1,2,3] # 일반적인 데이터, 함수를 저장 할 수 있다.
pickle.dump(data,f) # 쓰기
f.close()
# 바이너리 읽기
f = open("list.pickle","rb")
mul = pickle.load(f) # 읽기
f.close()
logging handling
- 프로그램이 실행하는 정보를 기록하는것
- 일반적인 print도 되지만 console에서의 기록은 분석이 어렵다.
-
모듈별로 logging도 필요함
- logging level
- 프로그램 진행 상황에 따라 다른 level의 log를 출력
- 개발 시점, 운영시점마다 다른 log가 남도록 지원한다.
debug(개발)>info(운영)>warning>error>critical
순이다.
# logging level
import logging
# 개발시 처리 기록을 남겨야 하는 로그정보
# 변수를 ~로 변경, 함수 ~를 호출
logging.debug("호출")
# 처리가 진행하는 동안의 정보를 알림
# 서버시작, 종료, 접속
logging.info("시작")
# 잘못입력하는등 의도하지 않은 경우
# str입력을 기대하는데 int가 들어옴
logging.warning("주위")
# 에러이지만 작동은 한다는 표시
# 외부의 ~와 연결안됨, 파일이 없음
logging.error("에러표시")
# 데이터가 손실나거나, 프로그램이 동작 안함
# 파일삭제, 강제종료등
logging.critical("깨짐")
- level 설정
import logging
if __name__ == "__main__":
logger = logging.getLogger("main")
#level설정 3이후
logging.basicConfig(level=logging.DEBUG)#Debug로 설정
#log를 어디다 저장할지
steam_handler = logging.fileHandler(
"my.log",mode="w",encoding="utf8")
logger.addhandler(steam_handler)# 아래의 메시지가 출력되게 된다.
# 이런 설정들을 따로 정해주는게 configparser(파일), argparser(실행시점)가 있다.
logging.debug("호출")
logging.info("시작")
logging.warning("주위")#레벨이 설정 안되어 있으면 warning부터 출력된다.
logging.error("에러표시")
logging.critical("깨짐")
configparser
- 프로그램의 실행 설정을
파일
에 저장 - section,key,value값의 형태로 설정파일을 사용하여 dict type으로 호출
- 개발단계에서 개발자전용 접근 주소를 사용하거나 할때 설정한다.
- confing파일 예시 example.cfg
[SectionOne]
Status:Single
name:Derek
Value:Yes
Age:30
Single:True
[SectionTwo]
FavoriteColor = Green //=또는 :도 가능하다.
[SectionThree]
FamilyName = Johnson
import configparser
config = configparser.ConfigParser()
print(config.sections()) # 섹션 이름들을 불러온다.
#[SectionOne,SectionTwo,SectionThree]
#값 가져올때
print(config['SectionOne']['Age'])
# 30이 출력된다.
argparser
- console 창에서 setting한다.
- console기발 python프로그램 기본 제공한다.
- 특수모듈(TensorFlow)도 존재하지만, 일반적으로 argparser를 사용
- command-line option이라 부름
import argparse
# 설명
parser = argparser.ArgumentParser(description = 'sum tow integers.')
# (짧은이름,긴이름,표시명,help설명,argumentrype)으로 구성됨
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.a+args.b)
- 실행방법
# 실제 사용방법
python arg.py -a 10 -b 20
python data handling
- 여러 형태의 파일형태가 있다.
- csv,web(html),xml,json형식
CSV
- comma separate value
- 텍스트파일이다
- 엑셀양실 데이터를 프로그램 상관없이 쓰기 위한 데이터 형식
- 탭(TSV),빈칸(SSV)으로 구분된다.
-
엑셀에서 다름이름으로 저장하면 된다.
- 처리
- 쉼표로 처리되었으면 전처리 과정이 필요
csv객체
를 사용pandas
로 처리를 하기도 한다.import csv reader = csv.reader(f, delimiter=',', # 글을 나누는 기준 기본 , lineterminator= '\r\n', # 줄바꿈 기준 기본 \r\n quotechar='"', # 문자열을 둘러싸는 신호 문자 기본 " quting = csv.QUOTE_ALL) # 데이터 나누는 기준이quotechar에 의해 둘러싸인 레벨
web
- 인터넷 공간의 정식 명칭
- HTML
- 웹의 구조를 표현하기 위한 언어
- 제목, 단락, 링크등의 요소를 Tag를 통해 표시
- 정보의 보고, 많은 데이터들이 웹을 통해 공유된다.
- 환율, 날씨, 기사, 특허 등
- html을 규칙을 통해 추출해서 분석이 가능
정규표현식(regurlar expression)
- 복잡한 문자열 패턴을 정의하는 문자 표현 공식
- 기본문법
- 문자클래스
[]
- 대괄호안의 문자들과 매칭
-
로 범위지정
- 반복
.
은 줄바꿈제외 모든 글자*
0개이상+
1개이상{최소횟수,최대횟수}
반복횟수 지정?
반복횟수가 1회|
or^
not
- 문자클래스
- 모듈
import re # 정규표현식 모듈
import urllib.request # html가져오기위한 모듈
url = "url"
html = usrlib.request.urlopen(url)
html_contents = str(html.read())
# 정규표현식은 r을 앞에 적어준다.
result = re.findall(r"[a-z]",html_content)
print(result)
XML
- extensible markup language
- tag를 사용하여 표시하는 언어
- HTML과 유사하다.
- 정보의 구조에대한 정보인 스키마(scheme)등올 표현
- 용도에 따라 다양한 형태로 변경
- 파싱
- 정규표현식
beautifulsoup
로 파싱- markup언어를 scraping을 위한 대표적인 도구
- 상대적으로 느려도 간편하다고 한다.
beautifulsoup
설치
conda install lxml
conda install -c anaconda beautifulsoup4
- 호출
from bs4 import BeautifulSoup
# BeautifulSoup(파일명, parser종류)
soup = BeautifulSoup(book_xml,"lxml")
# author태그를 찾는다.
soup.find_all("author")
# autor라는 태그를 찾는다. for문 형식
for author_data in soup.find_all("author"):
#author_data는 <author>내용</author>으로 객체형식으로 받는다.
author_data.get_text()#내용만 뽑아준다.
JSON
- javascript object notation
- javascript의 데이터 객체 표현 방식
- 간단하다, 데이터용량이 작다, code전환이 쉽다.
- xml의 대체제로 많이 활용되고 있음
- 파이썬의 json
- 데이터 저장과 읽기는 dict 타입과 호환가능
- 사이트마다 다르다.
- json파일의 구조를 읽고, dict type처럼 처리한다.
loads
,dump
로 읽고 쓰기 가능
import json
# 읽기
with open("json.json","r",encoding="uft8") as f:
contents = f.read()#읽기
json_data = json.loads(contents) #json형식으로 가져온다.
print(json_data["employees"])#DICT처럼 가져 쓸 수 있다.
with open("data.json","w") as f:
json.dump(data,f)# json을 쓰는 함수
기타 팁
- 모듈들
- pathlib
- os
- urllib(html)관련
- json
- re(정규식)
- pickle(객체저장)
- argparse
- configparsre
- BeautifulSoup(xml파서)
- beautifulSoup사이트
마스터클래스
- 최성철 마스터님
- 수학은?
- 선형대수
- 수리통계 미적분, 통계학
- 해석학
- 데이터 사이언티스트/머신러닝 엔지니어
- 머신러닝
- 기존의 제공된 모델을 실제 서비스에 연결하는 파이프부분
- 경량화를 통해 리소스를 줄이면서 빠르게 서비스 할지 구현하는것
- 데이터 사이언티스트
- 큰 범위이다.
- full-stack DL이란 강의 추천하심
- 머신러닝
- 주식
- 티지털 튜잉
- 리튬에어 베터리 메모….
- 제페토라는 회사를 한번 보아라
- 스파크 빅데이터 처리
- 사용법보다는 처리된 파일이라도 알기
- 데코레이터는 pytorch에서 자주 볼듯함미다
- 강의 사이트 coursera
피어세션 정리
- 주식
- 트렌드 공부하듯 하는 느낌이다.
- 모듈 검색
- 구글링으로 찾읍시다.
- GAN
- 탐지/그림생성 모델을 통해 피드백으로 서로를 더 속이게 진행
- 위조지폐/지폐잡는 경찰
- 파비 Pabii
- 통계학 블로그
- 3-4주차부터 좀더 ai관련해서 진행해보자
- 현재 부스트캠프의 전체 진행과정에서 이제 막 1주일 지난 시점이므로 정보공유를 활발한것도 좋다
- 하지만 너무 급하게 하다보면 독이 될수 있고 현재의 피어세션을 유지하면서 점차적으로 발전하는 피어세션이 되었으면 좋겠다.