강의 복습 내용

  • 예외를 하는법
    • 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파일은 컴퓨터만 이해하는 이진형식 파일
      • 엑셀, 워드 같이 특정 프로그램으로 여는 파일
  • 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주일 지난 시점이므로 정보공유를 활발한것도 좋다
    • 하지만 너무 급하게 하다보면 독이 될수 있고 현재의 피어세션을 유지하면서 점차적으로 발전하는 피어세션이 되었으면 좋겠다.