안녕하세요 늑대양입니다 :)
오늘은 [AI 데이터 사이언티스트 취업 완성 과정]의 7일차 일과를 정리하여 안내해드리도록 하겠습니다.
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif)
Day 7. 시간표:
- 온라인 학습: [한 번에 끝내는 데이터 사이언스]
- 오프라인 강의: [프로그래밍 실전 : Python]
Day 7. 온라인 학습 범위:
- 5강
- 예상 학습 시간: 2:59:23
대주제(Part) | 중주제(Chapter) | 소주제(Clip) |
Part.3 파이썬 기초와 데이터분석 | Chapter.01 파이썬 프로그래밍 | CH01_04. Data Type (실습) |
Part.3 파이썬 기초와 데이터분석 | Chapter.01 파이썬 프로그래밍 | CH01_05. IF (이론) |
Part.3 파이썬 기초와 데이터분석 | Chapter.01 파이썬 프로그래밍 | CH01_06. IF (실습) |
Part.3 파이썬 기초와 데이터분석 | Chapter.01 파이썬 프로그래밍 | CH01_07. for, while (이론) |
Part.3 파이썬 기초와 데이터분석 | Chapter.01 파이썬 프로그래밍 | CH01_08. for, while (실습) |
Chapter. 01 파이썬 프로그래밍:
04. Data Type (실습):
05. IF (이론):
IF : 조건에 따라 다른 명령을 수행하는 statement
# if statement syntax example
if condition:
<statement>
<statement>
...
elif condition:
<statement>
...
else:
<statement>
...
- python에서는 조건문을 if statement로 다룹니다
- 프로그래밍에서 조건에 따른 명령을 수행하는건 굉장히 중요합니다
- 프로그램의 규칙은 모두 조건에 따른 분기(branch)에 따라 결정됩니다
Key points:
- if 문을 사용할 땐, : 사용에 주의합니다
- 조건문을 이용한 프로그래밍을 한다는건, 의사결정(decision making)을 하는 것과 비슷합니다
- 조건에서 빠지는 것들이 없는지 항상 체크합니다. 보통 edge case에서 에러가 자주 납니다. 가장 쉬운 예시로 list의 처음과 끝의 원소를 indexing하는 경우입니다
(이를 boundary condition이라고 합니다)
06. IF (실습):
07. for, while (이론):
- Python에서는 for, while statement로 반복 수행을 다룹니다.
- 프로그래밍에서 가장 중요한 두 가지가 조건과 반복입니다.
- 컴퓨터는 단순 반복 계산에 최적화된 기계입니다.
- 어떤 작업을 반복하게 할 것인가? 를 잘 생각해야합니다.
# while statement syntax example
while condition:
<statement>
<statement>
...
- while statement는 조건에 따른 반복 수행을 합니다.
- 조건이 만족하는 동안 명령을 수행합니다.
- 특정 횟수를 반복하는게 아닌, 조건의 만족 여부에 따라 반복을 수행합니다.
# for statement syntax example
for iterator in iterable_object:
<statement>
<statement>
...
- for statement는 횟수에 따른 반복 수행을 합니다.
- 특정 횟수를 지정할 수도 있고, List 같은 sequence를 처음부터 끝까지 반복하게 할 수도 있습니다.
- 주어진 여러 개의 데이터를 순서대로 다룰 때 많이 사용합니다.
Key Points:
- for, while문을 사용할 때도 : 사용을 주의합니다.
- 반복문을 사용하려면 하려는 일을 “반복 가능하게" 바꿔주어야 합니다. → decomposition
- 조건문과 함께 사용되어 프로그램의 로직(logic)을 구성합니다.
08. for, while (실습):
Day 7. 프로그래밍 실전 : Python
4. 함수 (실습):
코딩하는데 함수를 몰라도 문제가 되지는 않지만 함수를 알면 굉장히 좋은 코드를 짤 수 있다!!
Function이란?
수학적인 의미의 함수와 개념은 비슷하지만 역할이 다르다!
- input이 들어와서 output이 정해진 규칙에 따라 나온다는 개념은 같지만, 프로그램에서의 하나의 함수는 하나의 기능을 나타낸다
- 정확하게 함수는 특정 기능을 구현한 코드 묶음이다
def 함수이름(param1, param2, ... ): <statement1> <statement2> return
- 함수를 쓰는 이유는 재사용성 때문이다.
함수를 사용하는 가장 중요한 이유는 재사용성 때문이다. Reusability라고 하며, 똑같은 구조의 코드가 반복되는 것을 피하기 위해 사용된다. 똑같은 구조의 코드는 보통 한 가지의 기능 단위로 묶이게 되며, 이 기능 단위를 코드로 묶어서 함수로 만든다.
Python Function Definition:
# 간단한 함수 예제
def add(a, b): # 파란색(add) > 함수의 이름을 의미, add(a, b) > 프로토타입!,
# Userdefined function: 파이썬 사용자가 만든 함수!
# Pre-defined(builtin) function: 파이썬이라는 언어에 정의되어있는 함수! (파이썬 언어를 만든 사람들이 만듬)
# 입력받은 a, b를 더한 값을 돌려주는 함수.
c = a + b
return c # 함수를 사용하는 사람은 c를 돌려 받는다
# 사칙연산 중 나누기 함수!
def div(a, b): ## Function definition
# 앞에 숫자를 뒤에 숫자로 나눈 값을 return
# c = a / b
# return c
return a / b
div(9, 3) ## Function call
>3.0
div(11, 2)
>5.5
div(8, 0) # 0으로 나눌 때, division by zero 에러 발생
>---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Input In [5], in <cell line: 9>()
5 return a / b
7 # div(9, 3) ## function call
8 # div(11, 2)
----> 9 div(8, 0)
Input In [5], in div(a, b)
1 def div(a, b): ## function definition
2 # 앞에 숫자를 뒤에 숫자로 나눈 값을 return
3 # c = a / b
4 # return c
----> 5 return a / b
ZeroDivisionError: division by zero
# 0으로 나눌 때를 대비한 코드 변경 진행
def div(a, b): ## function definition
# 앞에 숫자를 뒤에 숫자로 나눈 값을 return
# c = a / b
# return c
if b == 0:
# print("b에는 0이 들어가면 안됩니다!")
# return False
return 0 # return이 나오면 돌아감, 결과 리턴하고 다시 돌아감
else:
return a / b # return을 만나면 콜한 파트(ex. div(8, 0))로 돌아감
# div(9, 3) ## function call
# div(11, 2)
# div(0, 8)
div(8, 0)
>0
# 함수는 return을 만나면 끝납니다!!
# 함수는 tab이 들어간 모든 곳!!
# code block!! >> indentaion으로 구분!!
def div(a, b): ## function definition
# 앞에 숫자를 뒤에 숫자로 나눈 값을 return
# c = a / b
# return c
if b == 0:
print("b에는 0이 들어가면 안됩니다!")
return 0
# return False
# return 0
else:
return a / b
print("a")
# div(9, 3) ## function call
# div(11, 2)
# div(0, 8)
div(8, 0)
>b에는 0이 들어가면 안됩니다!
0
함수 정의의 다양한 형태:
1. 가장 흔하게 사용되는 경우: 함수 parameter와 return이 모두 존재하는 경우
def x(a, b):
return a + b
2. 함수 parameter는 없고 return이 존재하는 경우
def x():
return "Hi"
3. 함수 parameter는 있는데 return이 없는 경우
def x(a):
a = a + 1
4. 함수 parameter도 없고 return도 없는 경우
def x():
print("Hello World")
x()
>Hello World
# 함수 예제
# Q. 만약에 함수의 입력 parameter의 개수를 모를 땐 어떻게 해야할까?
# *(asterisk)를 앞에 붙이는 것으로 여러개의 parameter를 받아서 tuple로 변환하여 준다.
def add_many(*args): # args는 관습 표현으로 arguments의 args, *은 무조건 앞에 작성 필요!
# print(args)
# 파라미터로 입력받은 모든 숫자를 더해서 return 해주는 함수
return sum(args)
add_many(2, 105, 1, 2, 5, 12, 2, 2, 2, 15, 6)
>154
# 좀 더 정석적인 방식!!
def add_many(*args):
# 파라미터로 입력받은 모든 숫자를 더해서 return 해주는 함수
## TO-DO
total = 0 # 초기화는 for 문 밖에서 진행하자!!
for n in args:
total += n
print (total)
return total
add_many(1, 5)
add_many(1, 5, 6)
add_many(1, 5, 6, 10)
add_many(2, 105, 1, 2, 5, 12, 2, 2, 2, 15, 6)
>6
12
22
154
# ** 사용법
# 이름으로 넣으면 딕셔너리 형태로 받음!!!!
def x(**kwargs): # keyword argument > **의 의미!! > 너가 뭘 던질지는 모르겠지만, 다 받겠다!!!
...
...
return
# ** 예제
def y(a, b):
return a + b
def z(c, d):
return c + d
def x(**kwargs):
#def x(a, b, c, d):
print(kwargs)
m = y(a=kwargs['a'], b=kwargs['b'])
#m = y(a, b)
n = z(c=kwargs['c'], d=kwargs['d'])
#n = z(c, d)
print(m)
print(n)
return m, n
# D = {"a" : 3, "b" : 4, "c" : "hello", "d" : "world"}
#x(c='hello', d='world', a=3, b=4)
x(a=3, b=4, c='hello', d='world') # 이름으로 넣으면 딕셔너리 형태로 받음!!!!
>{'a': 3, 'b': 4, 'c': 'hello', 'd': 'world'}
7
helloworld
(7, 'helloworld')
함수를 외주회사로 이해!
외주사에게 주는 이름 name
외주사도 내부적으로 name을 사용함!
고객입장에서는 내부사정은 궁금하지 않고 결과값 name만 받으면 됨!
관리자 입자에서는 name 에 대한 구분이 필요함
코드블럭 내부에서 정의되지 않은 변수를 모두 global variable(전역변수)
외주사처럼 함수 내부에서 쓰는 변수를 local variable(지역변수) 라고 표현!
프로그래밍적 컨셉 이해가 중요!!
- 파이썬에서는 함수의 파라미터로, int/float/str/tuple(immutable data type)이 넘어가는 경우에는 내부에서 해당 변수를 수정해도 바뀌지 않습니다!!!
- 파이썬에서 함수의 파라미터로, list/dict/set(mutable data type)이 넘어가는 경우에는 내부에서 해당 변수가 변경될 경우, 글로벌 변수값 변경!!!
# 파라미터 예제
# Q. 만약에 함수의 파라미터 변수 이름과, 함수를 호출하는 argument의 이름이 같은 경우에 어떻게 될까?
# 순서대로 출력!! (1 to 4)
def change_name(name):
# local variable
print(f"2. {name}")
name = 'Lee'
print(f"3. {name}")
return name
# global variable
name = "Kim"
print(f"1. {name}")
name = change_name(name)
print(f"4. {name}")
# # 예상답안:
# 1. Kim
# 2. Kim
# 3. Lee
# 4. Lee
>1. Kim
2. Kim
3. Lee
4. Lee
# name > s 로 변경한다면 어떻기 바뀔까??
def change_name(name):
# local variable
print(f"2. {name}")
name = 'Lee'
print(f"3. {name}")
return name
# global variable
name = "Kim"
print(f"1. {name}")
s = change_name(name)
print(f"4. {name}")
>1. Kim
2. Kim
3. Lee
4. Kim
##### 이해방법!!
# 컴퓨터의 이해 방안
def change_name(lname):
# local variable
print(f"2. {lname}")
name = 'Lee'
print(f"3. {lname}")
return lname
# global variable
name = "Kim"
print(f"1. {gname}")
s = change_name(gname)
print(f"4. {gname}")
>1. Kim
2. Kim
3. Lee
4. Kim
#
def change_list(L):
# local variable
print(f"2. {L}")
L = [4, 5, 6]
print(f"3. {L}")
return L
# global variable
L = [1, 2, 3]
print(f"1. {L}")
change_list(L)
print(f"4. {L}")
>1. [1, 2, 3]
2. [1, 2, 3]
3. [4, 5, 6]
4. [1, 2, 3]
# immutable 데이터(int, float, str, tuple)를 넣으면 안바뀜
# mutable 데이터(list 등등)를 함수안에 넣으면 바뀜!!!
# 규칙임!! 파이썬에서 리스트를 함수에 넣을 때는 리스트 자체가 바꿀 수도 있다는 것을 기억하자!!!
def change_list(L):
# local variable
print(f"2. {L}")
L[0] = 4
print(f"3. {L}")
return L
# global variable
L = [1, 2, 3]
print(f"1. {L}")
change_list(L)
print(f"4. {L}")
>1. [1, 2, 3]
2. [1, 2, 3]
3. [4, 2, 3]
4. [4, 2, 3]
Lambda 함수를 사용해보자!
- 굉장히 간단한 함수가 있는 경우, 한 줄짜리 함수로 간편하게 사용할 수 있다
- 이런 함수를 Lambda 함수라고 하며, lambda 함수와 반복문을 통해 함수의 정의없이 다양한 프로그래밍이 가능하다
# Lambda 예제
def add(a, b):
return a+b
# 람다 함수, lambda function, 람다 표현식, lambda expression, inline function
# lambda 함수로 바꾸면?
f = lambda a, b : a + b # a,b와 : 은 붙여도 되고 띄워도 됩니닷!
print(add(3, 5))
print(f(3, 5))
>8
8
#
strings = ['yoon', 'kim', 'jessica', 'jeong']
#4, 3, 7, 5 > 3, 4, 5, 7 > kim, yoon, jeong, jessica
strings.sort()
strings
>['jeong', 'jessica', 'kim', 'yoon']
# list와 enumerate 활용
L = []
I = []
for i, s in enumerate(strings):
I.append(i)
L.append(len(s))
L.sort()
print(L)
print(I)
>[3, 4, 5, 7]
[0, 1, 2, 3]
# 함수 활용
def length(s):
return len(s)
strings.sort(key=length)
strings
>['kim', 'yoon', 'jeong', 'jessica']
# 람다함수 활용
# 함수 두 줄을 람다로 쓸 수 있다는 컨셉을 기억해보자!!
strings.sort(key=lambda s : len(s))
strings
>['kim', 'yoon', 'jeong', 'jessica']
주피터 노트북 숨은 기능:
- 함수에 커서를 두고 [shift] + [tab] 키를 누르면 설명이 출력된다!
# 알면 아주 아주 좋은 것들!!
# 뒤통수 맞을 일을 줄이도록 하자!!
# 변수할당 테스트 - 1
name = "Kim"
print(f"1. {name}")
def change_name(name):
print(f"2. {name}")
name = 'Lee'
print(f"3. {name}")
return name
print(f"4. {name}")
print(f"5. {name}")
change_name(name)
print(f"6. {name}")
change_name(name)
print(f"7. {name}")
>1. Kim
5. Kim
2. Kim
3. Lee
6. Kim
2. Kim
3. Lee
7. Kim
# 변수할당 테스트 - 2
# variable = data
# (lvalue) = (rvalue) # 주소, 공간 = 데이터
# 초기에 사용하고자하는 변수 설정이 필요 (변수 초기화)
a = 10
a = b + 10
>---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [58], in <cell line: 2>()
1 a = 10
----> 2 a = b + 10
NameError: name 'b' is not defined
a = 10
b = 3
c = a + b
c
>13
# 변수할당 테스트 - 3
a = a + 10
a
>---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Input In [1], in <cell line: 1>()
----> 1 a = a + 10
2 a
NameError: name 'a' is not defined
'AI > [부트캠프] 데이터 사이언티스트 과정' 카테고리의 다른 글
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 9. (0) | 2022.09.01 |
---|---|
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 8. (0) | 2022.08.31 |
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 6. (0) | 2022.08.29 |
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 5. (0) | 2022.08.26 |
[Megabyte School : AI 데이터 사이언티스트 취업 완성 과정] Day 4. (0) | 2022.08.25 |