교육 정보
- 교육 명: 경기미래기술학교 AI 교육
- 교육 기간: 2023.05.08 ~ 2023.10.31
- 오늘의 커리큘럼: 빅데이터 기초 활용 역량 강화 (5/10~6/9) - 파이썬 프로그래밍
- 강사: 조미정 강사님 (빅데이터, 머신러닝, 인공지능)
- 강의 계획:
1. 파이썬 언어 기초 프로그래밍
2. 크롤링 - 데이터 분석을 위한 데이터 수집(파이썬으로 진행)
3. 탐색적 데이터 분석, 분석 실습
- 분석은 파이썬만으로는 할 수 없으므로 분석 라이브러리/시각화 라이브러리를 통해 분석
4. 통계기반 데이터 분석
5. 미니프로젝트
- 특정 작업을 반복적으로 수행하기 위해 만들어진 코드의 블록
- 함수이름(파라미터)
- 이름이 있어 필요할 때 불러서 사용 할 수 있음
내장 함수 (built-in 함수)
- 모듈이나 패키지를 가져오지 않고 바로 사용할 수 있는 함수
- max, int, isinsistance, type, all, any등
- all
요소가 모두 참이면 True, 하나라도 거짓이면 False
Iteration 이 가능한 객체를 받아 (예 list, 튜플) 그 항목을 돌면서 모두 True 이면 결과로 True를 리턴 한다- any
요소가 하나라도 참이면 True, 모두 거짓이면 False
Iteration 이 가능한 객체를 받아 (예 list, 튜플) 그 항목을 돌면서 하나라도 True 이면 결과로 True를 리턴 한다
- 함수의 선언
def 함수명(파라미터):
코드
return 리턴값
- 함수의 이름은 소문자와 언더바_를 사용하여 기능을 유추하기쉽게 짓는 것이 권장됨
ex. 노래 데이터에서 가사를 가져오는 함수: get_song_lyrics(song)- 함수의 호출
- 선언된 함수를 함수명과 입력하고자 하는 인자로 호출
- 함수명(입력할 인자)
# 함수의 선언 def greet_user(): print("Hello!") # 함수의 호출 greet_user() # #결과 Hello!
- 인자 (Arguement, arg): 함수의 입력으로 들어가는 변수
- 파라미터와 인자의 차이점
- 파라미터: 함수의 선언시 어떤 변수를 사용하는지 정의
ex. A_func(B)일때 A_func 함수는 B값을 파라미터로 받는다.
- 인자: 함수의 호출시 파라미터에 실제 대입되는 값
ex. A_func(B)함수를 A_func(B-value)형태로 호출하면 B 파라미터에 B_value값이 인자로 들어간다.
- 인자에 키워드를 지정함
- 인자의 순서를 파라미터의 순서와 맞추지 않아도 됨
#인자 순서를 잘못 넣으면 def print_name(greet, name): print(greet, name, "님!") print_name("환영합니다", "파이썬") print_name("파이썬", "환영합니다") # #결과 환영합니다 파이썬 님! 파이썬 환영합니다 님! #인자를 그냥 순서대로 넣어버림 # #인자에 키워드를 지정하면 def print_name(greet, name): print(greet, name, "님!") print_name(greet = "환영합니다",name = "파이썬") print_name(name = "파이썬",greet = "환영합니다") # #결과 환영합니다 파이썬 님! 환영합니다 파이썬 님! #순서를 바꿨지만 의도한 대로 출력됨
- 인자 위치에 default값을 설정해두면 해당 인자가 들어오지 않았을때 default값을 가지고 함수를 수행한다.
- func(arg = default 값):def print_name(greet, name = "anonymus"): print(greet, name, "!") print_name("Hi", "Lee") print_name("Hi") # #결과 Hi Lee ! Hi anonymus !
- 디폴트인자는 인자들 중 가장 마지막에 배치한다.
def print_name2(name = "anonymus", greet): print(greet, name, "!") print_name2("Hi") # #결과 SyntaxError: non-default argument follows default argument # 디폴트 인자를 먼저 지정하면 위와 같은 오류가 남
- 디폴트인자와 조건문을 사용하면 인자가 들어오지 않은 경우에 관련요소를 완전히 생성하지 않을 수 있음
- 디폴트값 = None 으로 설정
# address인자의 default를 공백으로 둘 경우 def personal_info (name, age, address=""): person = {'이름': name, '나이' : age} # addressrk 공백이므로 if문에서 false가 됨 if address: person["주소"] = address print(person) personal_info ('testname', 56) #이렇게 하면 입력되지 않은 데이터가 사용되는 부분을 그냥 생성하지 않을 수 있음 # #결과 {'이름': 'testname', '나이': 56}
- 갯수가 정해지지 않은 인자를 받는 방법 중 하나
- 인자를 순서대로 튜플 자료형으로 저장하여 반환
- 기본 매개변수가 있다면 먼저 다 쓰고 그 뒤에 위치해야 함
def make_pizza(*toppings): print(type(toppings)) print(toppings) for i in toppings: print(i) print(type(i)) #make_pizza('pepperoni') make_pizza('mushrooms', 'green peppers', 'extra cheese') # #결과 <class 'tuple'> # toppings 자체는 튜플이지만 ('mushrooms', 'green peppers', 'extra cheese') mushrooms <class 'str'> #요소를 하나씩 받아오면 문자열임 green peppers <class 'str'> extra cheese <class 'str'>
- 갯수가 정해지지 않은 인자를 받는 방법 중 하나
- 변수명을 지정 가능
- 변수명과 값의 쌍을 딕셔너리 자료형으로 저장하여 반환함
def print_fruit(**fruits): print(fruits) print(type(fruits)) print_fruit(a="apple", b="banana") # #결과 {'a': 'apple', 'b': 'banana'} <class 'dict'>
- 키워드 가변인자는 인자값이 쌍으로 들어오지 않으면 기본 매개 변수(positional argument)가 들어왔다고 에러가 남
def print_fruit(**fruits): print(fruits) print_fruit("apple", "banana") # #결과 TypeError: print_fruit() takes 0 positional arguments but 2 were given
- 일반 변수와 키워드 가변인자를 같이 받을 수 있음
def build_profile(name, **user_info): profile = {} profile["name"]=name for key, value in user_info.items(): profile[key] = value return profile member1 = build_profile("jane", phone = "01000000000") member2 = build_profile("david", city= "경기도") print(member1) print(member2) # #결과 {'name': 'jane', 'phone': '01000000000'} {'name': 'david', 'city': '경기도'}
- 변수가 저장되는 장소 = 네임스페이스
- 지역 영역 (local scope): 함수 내부에서 생성되고 함수내부에서만 사용되는(값이 유지되는) 변수
- 전역 영역 (global scope): 함수 바깥에서 생성되고 프로그램 전역에서 접근 가능한 변수
- 내장 영역 (built_in scope)
- 변수이름을 찾을때는 LGB(local-global-built_in)순서로 찾아나감
#함수내에서 변수를 바꾸어도 밖의 변수(글로벌 변수)에는 영향을 주지 않음 animal = "rabbit" print(animal) def print_animal(): animal = "pig" print(animal) print_animal() print(animal) # #결과 rabbit pig rabbit # 그대로 유지된 global 변수 animal의 값
- 함수내에서 전역변수를 사용할 수 있지만 잘 사용하지 않음
#함수 내에서 global변수를 바꾸고 싶을때는 global 선언을 해야 함. #하지만 헷갈리니까 잘 쓰지 않음 animal = "rabbit" print(animal) def print_animal(): global animal animal = "hare" print(animal) print_animal() print(animal) # #결과 rabbit hare hare # hare로 바뀐 global 변수 animal의 값
함수의 인자에 들어가서 매개변수로 사용되는 함수
def call_func(func): #함수를 받아서 func() #그 함수를 실행하는 함수 -> 여기서 func이 콜백함수인것! def print_hello(): print("hello") print_hello() #함수를 그냥 부른 경우 call_func(print_hello) #함수이름을 call_func에 인자처럼 넣어서 call-func 안에서 실행함 # #결과 hello hello
함수와 반복 가능한 자료형을 입력받아 반복 가능한 자료형의 요소를 인수로 함수를 수행하고 결과값을 반환하는 함수
- map(func, list)
: 리스트나 튜플 형태로 받고 싶으면 형변화을 해줘야 함
- list(map(func,list))
- tuple(map(func,tuple))def two_times(list_data): return list_data*2 a= [1,2,3,4] result = list(map(two_times,[1,2,3,4])) print(result) # #결과 [2, 4, 6, 8]
lista = [1.5, 3.8, 6.5, 2.0]
lista = list(map(int, lista)) # 내장함수인 int를 사용!
print(lista)
#
#결과
[1, 3, 6, 2]
함수와 반복가능한 자료형을 입력받아 반복가능한 자료형의 요소를 인수로 함수를 수행하고 결과값 중 함수의 return값이 True인것만 모아 반환하는 함수
- filter(func, list등)
- map과 같이 리스트나 튜플 형태로 받고 싶으면 형변화을 해줘야 함
- map과 다른점은 True/False에 따라 값을 반환할지 결정한다는 점과 함수의 리턴값이 아닌 원래 요소의 값을 반환한다는 점
- list(filter(func,list))
- tuple(filter(func,tuple))
lista = [1.2,-3,-5,23,9,0.2] #인수 값이 양수인지만 검증하는 함수를 만들면 이런식인데 def positive_number(x): return x > 0 #이걸로 lista를 map을 돌리면 boolean으로 된 리스트를 리턴함 print(list(map(positive_number,lista))) #근데 filter를 사용하면 함수에서 true를 반환하는 값만 모인 리스트를 받을 수 있음 print(list(filter(positive_number, lista))) #결과 [True, False, False, True, True, True] [1.2, 23, 9, 0.2]
- 1회성 익명 함수 (메모리에 저장되지 않으므로 다시 불러올 수 없음)
- 간단한 코드를 간단하게 작성
- map 함수 등의 func 변수에 넣어서 많이 사용
# 0~5 를 제곱한 값을 요소로 가지는 리스트를 출력하고자 할때 함수를 선언하여 사용하면 def square(x): return x ** 2 result = list(map(square,range(5))) print(result) #와 같은데 이를 lambda 함수를 사용하면 result = list(map(lambda x: x **2, range(5))) #처럼 한 줄로 표현 할 수 있음 print(result) # #결과 [0, 1, 4, 9, 16] [0, 1, 4, 9, 16]