1. 기업맞춤형 빅데이터 분석가 양성과정 소개
2. 기업맞춤형 빅데이터 분석가 양성과정 노트목록
https://crosefrog.tistory.com/entry/20210104-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-4%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240105-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-5%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
https://crosefrog.tistory.com/entry/20240109-%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D%EA%B0%80-%EC%96%91%EC%84%B1%EA%B3%BC%EC%A0%95-7%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
3. Chepter 06 예외_처리 & 연습문제_배포용.ipynb
4. Notion 빅데이터 분석가 양성과정 대시보드
https://shaded-chair-f39.notion.site/d1191ac35d7c4f09b2fd0bdc9a91debc?pvs=4
5. Naver 블로그 포스팅
https://blog.naver.com/PostView.naver?blogId=moment_by_moment&logNo=223318532441&redirect=Dlog
https://blog.naver.com/PostView.naver?blogId=moment_by_moment&logNo=223318563884&redirect=Dlog
6. Google Colaboratory Notebook
https://colab.research.google.com/drive/155Ayelf2RTW79KvN6Mu6ZKTo5TifnhP5#scrollTo=Y6_xZFH3yKXH
https://colab.research.google.com/drive/1MkqmigEayZtjhLbRjzT29gSyuOUVR3sI#scrollTo=b_bgvXHK8_9A
7. 필기노트
담배가 조선말기에 들어왔을 때, 굉장히 비쌌을 것이다.
안경, 커피 등 처음엔 굉장히 비쌌다.
어른앞에서 안경을 쓰거나, 같이 담배를 피우거나, 모자를 쓰고 있으면 예의없는 것으로 여겼었다.
- 분위기가 많이 변했다.
민소매가 예전에는 민망한 패션이었지만 지금은 아무렇지도 않다.
4장 반복문
: 리스트, 딕셔너리, for문, while문
Ch06 예외 처리
- 구문 오류(syntax error): 파이썬 코드 자체의 문법 에러
→ 프로그램 실행 전에 발생하는 오류
예외 상황, 사건이 발생하게 되었다.
#이런 error말고 답이 틀리는 경우: 로직 에러
→ 이런 에러를 찾는 것은 어렵다.
치명적인 에러는 잘 처리해야 한다.
- 치명적 예외(exception) 사건
- NameError: 이름 에러
- IndexError: 인덱스의 범위
- 에러가 생기면 종료되도록 구성되어 있다.
#예외 사건을 어떻게 잘 처리할 것인가?
첫차는 굉장히 신중하게 관리한다. 정수관리
- 가급적이면 명확하게 얘기하도록 하자.
예외 처리의 본질: 혹시나 해서 발생할 거 같은 상황을 미리 방지하는 것.
예외 처리 방법
- 조건문(If문)을 사용하는 방법
사전에 어떤 상황인지 고민해보자.
- 눈이 오는 날은, 차가 많이 미끄러질 수 있는 상황이다.
⇒ 눈이 오기 전에 미리 상황 파악을 하고 가자. (미연 방지)
- try ~ except ~를 사용하는 방법
try:
# 예외가 발생할 가능성이 있는 코드
except:
# 예외가 발생했을 때 실행할 코드
try:
number = int(input("정수 입력: "))
print('원의 반지름 :', number )
print('원의 둘레 :', 2*3.14*number )
print('원의 면적 :', 3.14*number*number)
except:
print('위 과정에서 예외가 발생했습니다.')
예외 발생
positive_int = int(input('양의 정수를 입력 하세요 : ') )
d = 10 // positive_int
s = 10 % positive_int
print(f'입력하신 수, (positive_int)로 10을 나누었을 때 몫은 {d}이고 나머지는 {s}입니다.')
어학연수 갈 생각이 원래 없었다.
(인생은 원래 예상치 못한 사건이 발생한다.)
큰 수를 저장할수록 비트 수가 늘어난다.
‘무한대’ 라는 숫자를 보관하려면 무한비트가 필요하므로 저장할 수가 없다.
ValueError
TypeError
SyntaxError
ZeroDivisionError
positive_int = int(input('양의 정수를 입력 하세요 : ') )
try:
d = 10 // positive_int
s = 10 % positive_int
print(f'입력하신 수, (positive_int)로 10을 나누었을 때 몫은 {d}이고 나머지는 {s}입니다.')
except:
print('예외 발생!')
while True:
try:
number = int(input('정수 입력: '))
except:
print('정수를 입력하지 않으셨습니다.')
else:
print('원의 반지름
예외 처리 try ~ except ~ else ~ 사용방법
try:
# 예외가 발생할 가능성이 있는 코드
except:
# 예외가 발생했을 때 실행할 코드
else:
# 예외가 발생하지 않았을 때 실행할 코드
try:
number = int(input("정수 입력: "))
except:
print('정수를 입력하지 않았습니다.')
else:
print('원의 반지름 :',number )
print('원의 둘레 :', 2*3.14*number )
print('원의 면적 :', 3.14* number* number)
while True:
try:
number = int(input('정수 입력: '))
except:
print('정수를 입력하지 않으셨습니다.')
else:
print('원의 반지름 :', number)
print('원의 둘레 : ', 2*3.14*number)
print('원의 면적 : ', 3.14 * number*number)
break
대학 생활 동안, 하나에 미쳐서 열심히 해보길 바라는 마음이다.
연애든, 뭐든 하나에 미쳐서 파고 들어보자.
⇒ 열정적으로 살자.
하기 싫은 것은 없다. 그렇다고 하고 싶은 것도 없다.
목표가 없었다. (인생에 기복은 늘 있는 법이다.)
지금 내가 뜨뜻미지근하다면,
한번쯤은 어떤 분야에 타오르는 삶을 살아보자.
(쫄지말고 해보자.)
예외 처리 try ~ except ~ else ~ finally 사용 방법
try:
# 예외가 발생할 가능성이 있는 코드
except:
# 예외가 발생했을 때 실행되어야 하는 코드
else:
# 예외가 발생하지 않았을 때 실행되어야 하는 코드
finally:
# 예외 발생 여부와 관계 없이 무조건 실행되어하는 코드
try:
number = int(input("정수 입력: "))
except:
print('정수를 입력하지 않았습니다.')
else:
print('원의 반지름 :',number )
print('원의 둘레 :', 2*3.14*number )
print('원의 면적 :', 3.14* number* number)
finally:
print('좋은 하루 보내세요.')
- finally는 무조건 실행된다.
정리: try는 혼자 쓰이지 않는다.
try + except
try + except + else
try + except + finally
try + except + else + finally
try + finally
- finally에 대한 오해
try:
file = open('info.txt', 'w')
# 여러 가지 업무 처리
file.close() # 해당 파일을 닫습니다.
except:
print('파일 처리에서 오류 발생')
print('파일이 제대로 닫혔는지 확인하기')
print('file.closed :', file.closed)
- 인위적으로 예외를 발생시키는 경우
try:
file = open('info.txt', 'w')
# 예외 발생 상황을 만들기 위해,
# 일부러 'ValueError'를 발생시키겠습니다.
raise ValueError
file.close()
except:
print('파일 처리에서 오류 발생')
print('파일이 제대로 닫혔는지 확인')
print('file.closed :', file.closed)
try:
file = open('info.txt', 'w')
# 파일을 사용하는 작업을 진행 중에
# 예외 상황 발생
# 예외 발생 상황을 만들기 위해,
# 일부러 'ValueError'를 발생시키겠습니다.
raise ValueError
except:
print('파일 처리에서 오류 발생')
finally:
file.close() # 해당 파일을 닫습니다.
print('파일이 제대로 닫혔는지 확인하기')
print('file.closed :', file.closed)
- file close()를 꼭 finally안에 둬야 하는 건 아니다.
→ finally는 필요에 따라 요령껏 사용하면 된다.
finally구문에 대해 조금 더
- try 구문 내부에서 return 키워드를 사용하는 경우
→ try 구문 중간에서 return되어도 finally 구문을 무조건 실행됨
(함수가 try 구문에서 return을 원하는 상황에서 제어권을 호출한 쪽에 넘긴다고 해도 finally 구문은 실행이 됨. (finally 구문에서 파일을 닫을 수 있음)
- 반복문과 함께 finally를 사용하는 경우
→ 반복문에서 break로 빠져 나가는 경우에도 finally 구문을 실행한 후 반복 문을 탈출하게 됨.
print('프로그램이 시작되었습니다.')
while True:
try:
print('try 구문이 실행되었습니다.')
break
print('try 구문의 break 키워드 뒤입니다.')
except:
print('except 구문이 싱행되었습니다.')
finally:
print('finally 구문이 실행되었습니다.')
print('프로그램이 종료되었습니다.')
=>
프로그램이 시작되었습니다.
try 구문이 실행되었습니다.
finally 구문이 실행되었습니다.
프로그램이 종료되었습니다.
목표를 달성하기 위한 방법들을 구체적으로 생각해보자.
꿈꾸고 계획을 할 때, 시간을 정해보자.
예를 들어, 차를 바꾸고 싶다고 해보자.
→ 돈이 생겨야 한다. (저절로 생기지 않는다.)
구체적으로, 언제까지 이뤄낼 것인지 자주 생각해보자.
- 본격적으로 이야기를 시작하기 전에
→ 현실에서 어떤 사건(예외 사건, 예외 상황 등)이 발생하면 ‘누가, 언제, 어디서, …’라는 정보가 존재
→ 프로그래밍에서도 예외(사건)가 발생하면 관련된 정보가 생성되어 예외 객체(exception object)에 저장됨.
- 예외 객체(exception object)는 다음과 같은 형태로 사용함.
try:
예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
예외가 발생했을 때 실행할 구문
예외의 종류가 참 많다. (다양하다.)
예외를 다루는 아저씨들의 주인이 exception이다.
try:
예외가 발생할 가능성이 있는 구문
except 예외의 종류 as 예외 객체를 활용할 변수 이름:
예외가 발생했을 때 실행할 구문
try:
number = int(input('정수 입력 >'))
print('원의 반지름 :', number)
print('원의 둘레 :', 2*3.14*number)
print('원의 면적 :', 3.14*number*number)
except Exception as exception:
# 예외 객체를 출력해 봅니다.
print('type(exception) :', type(exception))
print('exception :', exception)
=>
정수 입력 > 7세
type(exception) : <class 'ValueError>
exception : invalid literal for int() with base 10: '7세'
- 여러 가지 예외가 발생할 수 있는 상황: ValueError
int(’일) → ValueError를 발생시켰습니다.
lst = [1,2,3,4,5]
try:
idx = int(input('양의 정수 입력(범위는 0부터 {})>'.format(len(lst)-1)))
print('{}번째 요소 : {}'.format(idx, lst[idx]))
except Exception as error:
print('type(error) :', type(error))
print('error :', error)
=>
양의 정수 입력(뻠위는 0부터 4)>5
type(exception) : <class 'IndexError'>
error : invaid literal for int() with base 10: '일'
- 여러 가지 예외가 발생할 수 있는 상황: IndexError
lst = [1,2,3,4,5]
try:
idx = int( input('양의 정수 입력(범위는 0부터 {})>'.format(len(lst)-1)))
print('{}번째 요소 : {}'.format(idx, lst[idx]))
except Exception as exception:
print('type(Exception) :', type(exception))
print('exception :', exception)
=>
양의 정수 입력(범위는 0부터 4)> 5
type(Exception) : <class 'IndexError'>
exception : list index out of range
- 예외를 구분하여 처리할 수 있음
try:
예외가 발생할 수 있는 구문
except 예외의 종류A:
예외A가 발생했을 때 실행할 구문
except 예외의 종류B:
예외B가 발생했을 때 실행할 구문
except 예외의 종류C:
예외C가 발생했을 때 실해할 구문
깨끗하게 청소된 환경과 지저분한 환경은 큰 차이가 있다.
(책상 위를 깨끗하게 정리해야 한다.)
공간이 사람에게 주는 영향이 상당하다.
→ 삶의 태도가 변한다.
아래 코드의 경우 TypeError에 대한 예외 처리를 만들어 두지 않았기 때문에
프로그램(코드)이 ‘죽었다!’
a = 2
a + '입니다'
⇒ ⇒ TypeError에 대한 예외 처리를 만들어 두지 않았기 때문에 프로그램(코드)이 ‘죽었다!’
lst = [1, 2, 3, 4, 5]
try:
idx = int( input('양의 정수 입력(범위는 0부터 {})> '.format(len(lst)-1)))
print('{}번째 요소 : {}'.format(idx, lst[idx]))
except ValueError as exception:
print('정수를 입력해 주세요.')
print('exception :', exception)
except IndexError as exception:
print('리스트의 인덱스 범위를 벗어났습니다.')
print('exception :', exception)
- raise 구문
→ 프로그램이 실행 도중 강제 종료되는 것을 막기 위해 예외는 꼭 처리되어야 함
→ 하지만 프로그램을 개발하는 동안에는 정말 의도적으로 예외 상황을 만들기도 함
→ ‘아직 구현하지 않은 부분이 있는데 까먹을 수 있으니 확실하게 문제(에러)가 생기게 만들자’
⇒ 그래서 나중에 “이 부분을 코딩해야 한다는 것을 기억하게” 또는 “이 상태로 프로그램이 더 진행되면 프로그램이 이 시점에 종료하는 것보다 더 큰 문제를 일으킬 수 있으니 여기서 강제 종료 시키자’ 등의 이유에서 의도적으로 예외를 발생시키게 된다.
6장 연습문제: 앞에서 한 내용들을 포함해서 출제된다.
사물이라는 표현이 사전적 의미랑 다를지 모르지만, 세상만물이 객체라 보면 된다.
유형이든, 무형이든 떠올릴 수 있는 것들은 객체이다.
사물을 특징짓는 것들이 있고, 기능 관련된 것들이 있다.
사물을 바라볼 때, 어떤 사물의 속성을 두 가지 측면에서 바라보고자 한다.
- 속성(attribute) = 변수
- 매서드(method) = 함수
이 2가지를 가지고 정의를 한다.
클래스: 종자, 분류
객체 설계
Ex) Tiguan + Iguana = Tiguan
내가 신이라면, 다리는 4개, 신진대사, 물 속에서 생존가능 등등..의 구상을 하게 된다.
class Tiguan():
color = 'black'
class Tiguan():
color = 'black'
noname = Tiguan() #이름이 noname이야?
print(noname.color)
print(type(noname))
=>
black
<class '__main__.Tiguan'>
class Tiguan():
color = 'black' # 속성(attribute, 변수)
def run(self): # 메서드(method, 함수)
print('꼼지락~꼼지락~')
tiguan = Tiguan() # 이름이 tiguan
print(tiguan.color)
tiguan.run()
print(type(tiguan))
=>
black
꼼지락~꼼지락~
<class'__main__.Tiguan'>
속성 => 변수로 저장
기능 => 함수로 저장
멤버 함수라고 얘기하기도 한다.
특수목적으로 함수명을 지정하기도 한다. (독특하게 이름을 지음)
pass: 일단 보류라는 의미
설계도대로 만드는 중인 개체
-> 이름이라는 속성을 가져보자.
init함수는 먼저 실행한다는 의미
self 함수는 처음엔 자동으로 생성되어서 자동 호출된다.
self는 만들어지고 있는 Tiguan 자체를 의미한다.
처음에는 이름이 없으나, 만들어지게 된다.
class Tiguan():
def __init__(self,name):
self.name = name
클래스는 어떤 객체를 만들려고 하는 설계도 도면, 구상도이다라고 생각하면 매끄럽다.
객체는 세상만물을 어떻게 정의하고 표현할지 생각해 낸 것이 속성과 기능이 있다는 것이다.
예외 에러 처리할 때도 에러처리할 수 있는 기능을 부여해준 것이다.
=> 공식용어: 객체, 객체를 만드는 것은 클래스이다.