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
https://crosefrog.tistory.com/entry/20240111-%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-9%EC%9D%BC%EC%B0%A8-%EB%85%B8%ED%8A%B8
3. COS Pro 1차 2급.ipynb / Ch08 클래스 연습 문제 배포용.ipynb
4. Notion 빅데이터 분석가 양성과정 대시보드
https://shaded-chair-f39.notion.site/d1191ac35d7c4f09b2fd0bdc9a91debc?pvs=4
5. Naver 블로그 포스팅
https://blog.naver.com/moment_by_moment/223320849121
6. Google Colaboratory Notebook
https://colab.research.google.com/drive/1LTa7wNu0RT68MFxH2Dzx-2EIFWbX7VV2#scrollTo=RFy_-hmrQMtl
https://colab.research.google.com/drive/189WWQDc_mEm4xQ7FbCvMK8KrPavJ82-i
7. 필기노트
집주인 할머니가 단칸방에 살고, 여자만 사는 방이 있고, 가족이 머무는 방이 있었다.
내가 다루고자 하는 모든 대상: 객체
사람을 표현할 때, 어떻게 나타내는가?
속성: 대상을 표현하는 방법
- 데이터를 객체로 표현
객체 지향 프로그래밍: 객체를 만들고 객체들의 상호 작용을 중심으로 프로그래밍하는 방법론
→ 클래스를 나눠서 분류할 수 있다.
객체(Object)
- 속성: 속성(값) → 변수
- 메서드(method): 기능 → 함수
클래스는 구상도(설계도)다.
클래스(Class)
- 클래스는 객체(object)를 만들기 위한 구상, 설계도
코드 문법에 맞도록, 파이썬 언어로 작성한다.
함수를 파이썬 언어로 표현할 때
속성 = 변수
기능 = 함수
- 함수와 변수들로 이루어지는 구조를 갖는다.
클래스(Class) 정의
- 초기화 작업: 초기 값을 설정하는 것
class Tiguan():
def __init__(self, name): # 초기화 함수: 객체 생성 시 자동 호출
self.name = name
tiguan = Tiguan('쫑')
print(tiguan.name)
name이라는 변수가 가지고 있는,
변수 name이 가지고 있는 ‘쫑’ 이라는 변수를
[,parameter,…]
run이라는 method를 추가하였다.
tiguan = Tiguan(’쫑’)
→ 클래스명이 함수인 경우
- 클래스명(변수) = 생성자 or 생성자 함수라 한다.
#모든 영어식 표현을 한국식으로 표현하면 어색하다.
객체의 메서드
class Tiguan():
def __init__(self, name):
self.hello() # look at me
def run(self):
print('꼼지란~꼼지락~')
def hello(self):
print('안녕하세요')
tiguan = Tiguan('메리')
클래스(Class)의 상속(Inheritance), 설계도 복사?
- 클래스 상속
(부모 클래스로부터 속성, 메서드를 상속 받음)
class Tiguan():
def __init__(self, name):
seif.name = name
self.hello()
def run(self):
print('꼼지란~꼼지락~')
def hello(self):
print('안녕하세요')
class SonOfTiguan(Tiguan):
pass
son_of_tiguan = SonOfTiguan('해피')
print(son_of_tiguan.name)
상속의 개념: 설계도 복사와 다른 점이 무엇인가?
method override
강화도로 자주 놀러갔었다.
아들이 초등학생이든, 중학생이든, 고등학생이든 똑같은 숙소에 머물렀다.
- 숙박시설에 식사장소가 있으면 호텔이다.
아들이 어릴때부터 수영을 배워서 잘한다.
그러나 아버지는 수영을 할 줄 모른다.
→ 부모로부터 물려받은 기능말고도 추가된다.
내가 윈도우 프로그램을 만든다고 해보자.
공부를 하다보니, 누군가가 만든 윈도우가 보인다.
프로그램을, 완전 밑바닥부터 시작하는 사람은 없다.
- 가져다 쓰는 것이 우선이다.
- 어느정도 실력이 향상되면 (오랜 시간이 걸림) 직접 만들어본다.
메서드 오버라이드(override)
- 부모 클래스에서 물려 받은 메서드를 재정의
부모 클래스의 기능, 메서드 호출
class Tiguan():
def __init__(self, name):
self.name = name
def run(self):
print('꼼지란~꼼지락~')
def hello(self):
print('안녕하세요')
부모 초기화 함수
클래스 속성에 객체 할당
- 클래스 Wing 설계
class Wing():
def fly(self):
print('푸드덕~푸드덕~')
class FlyingTiguan(Tiguan):
def __init__(self, name, color):
super().__init__(name)
self.color = color
self.hello()
def shout(self):
print('하나 둘~ 하나 둘~')
def hello(self):
print('저는 날 수 있어요~')
def self_fly(self):
print('둥실 둥실 떠오른다')
교재내용
객체(Object)
- 학생 성적 관리 프로그램을 만든다면 무엇이 필요할까?
(학생 이름, 학번, 과목 별 성적 등)
- 학생 이름, 과목(국어, 수학, 영어, 과학) 이름을 키로 하는 딕셔너리
학생 정보를 하나씩 입력!
(버거로운 일 ~ 오타 가능성)
지금 영어를 모른다고 어떤 문제가 발생하는 건 아니다.
어쩌면 평생 필요하지 않을지도 모른다.
학생 개인을 리스트로 표현하려면
이름, 학번, 총점, 평균 등을 딕셔너리로 나타내야 한다.
→ 각 학생에 대한 정보를 딕셔너리형태로 변환하는 함수를 선언한다.
def create_student(name, korean, math, english, science):
return {
'name':name,
'korean':korean,
'math':math,
'english':english,
'science':science
}
- 객체(Object)
‘총점’과 ‘평균’을 구하는 일은 한 학생을 대상(하나의 객체)으로만 이루어짐
→ 따라서 이를 고려해서 함수 생성
(총점, 평균을 구하는 기능은 한 학생이 대상이다.)
즉, 이런 연산은 한 객체에 국한되는 계산이다.
class member 함수와 연관된 기능이다.
print라는 기능이 있을 때,
PC에서 해야되는 기능이 다르고,
프린트기기에서 해야되는 기능이 다르다.
- 전체 코드 수정 정리
학생 데이터 생성 방법 변경 그리고 ‘총점’과 ‘평균’을 구하는 일은 한 학생을 대상으로만 이루어짐을 고려
(대상을 전달해주면, 그 학생에 대한 정보가 빠져나올 수 있도록)
이름과 함수 호출로 총점 및 평균을 보여주는 것이 get_info_student의 역할
속성: 이름, 과목
함수: 평균, 총점
옛날 아버지와 사이가 불편했던 시절, ‘천천히 얘기해라’라는 말을 했었다.
→ 말을 하면서, 내가 무슨 생각으로 말하는지 생각해야 한다.
- 클래스 선언
클래스는 프로그램 코드를 효율적으로 작성하기 위해 만들어진 것이다.
class Student:
pass
student = student()
student = [
student(),
student(),
student(),
student(),
student(),
student()
]
클래스 선언
- 생성자: 클래스 이름과 동일한 이름의 함수를 생성자(constructor)라고 부름
- 초기화 함수, init(self)
클래스 내부의 함수는 모두 1개 이상의 매개변수를 갖는다.
class Student:
def __init__(name, korean, math, english, science):
'self.name':name,
'self.korean':korean,
'self.math':math,
'self.english':english,
'self.science':science
student = [
student('김성필', 93, 83, 92, 93),
student('구숙정', 90, 80, 95, 87),
student('장만옥', 92, 79, 93, 88),
student(),
student(),
student()
]
소멸자(destructor)
- 소멸자(destructor) ↔ 생성자(constructor)
- 인스턴스가 소멸될 때 호출되는 함수
메소드(method)
클래스가 가지고 있는 함수를 메소드(method)라고 부름
- 또는 멤버 함수(member function), 인스턴스 함수(instance function)라고 부름
- 기본 형태
데이터보호 즉면에서 용이함.
데이터를 객체형태가 아니라, 리스트형태이면 아무 함수나 다 읽을 수 있다.
거짓말을 하고 있는지, 거짓말 한 걸 모르는지
아까 우리가 봤던 객체지향코드로 바꾸면,
학생들을 관리하려면
학생이라는 대상을,
선생님은 교육할 대상으로 본다.
운영진은 고객으로 본다.
(익숙하지 않으면 좋지 않을 수 있다.)
→ 장점이 있기 때문에 사용하는 객체 지향 코드 방식
리스트안에 숫자와 문자에 따라
정수, 변수또한 객체이다.
속성으로 값을 넣을 수도 있다.
문자열에 딸린 기능은 많다.
isinstance(인스턴스, 클래스_이름)
- 클래스를 만들 때, 대문자로 만들자는 것이 암묵적 약속이다.
(data type을 확인할 수 있다.)
class Human():
def __init__(self):
pass
class Student(Human):
def __init__(self):
pass
student = Student()
#인스턴스 타입 확인
print('isinstance(student, Student):', isinstance(Student, Student))
직장생활 하다보면, 항상 일찍 일어나게 된다.
(몸이 변하게 된다.)
- 특수한 이름의 메소드
이름: ‘<이름>’ 형식처럼 특수한 이름.
- str()함수 선언
def __str__(self):
return '{}\\t{}\\t{}'.format(self.name, self.get_name(), self.get_average())
str()함수의 매개변수로 student 인스턴스를 전달하면 student 인스턴스의 str() 함수가 호출됨
mbc의 도메인 주소: www.imbc.com
→ www.mbc.com라는 도메인 주소는 누군가가 사용하고 있었다.
str 다음에 뭘 넣으면 뭔지를 보여주는 용도로 사용해왔다.
(내가 무엇을 보여줄까는 내가 정의내리는 것이다.)
객체를 넘기면 학생정보를 보여주는 것으로 정의하였다.
- 인스턴스 간 비교 연산자
class Student:
def __init__(self, name, korean, math, english, science):
self.name = name
self.korean = korean
self.math = math
self.english = english
self.science = science
def get_sum(self):
return self.korean + self.math + self.english + self.science
def get_average(self):
return self.get_sum()/4
student1 = Student('김성필', 93, 83, 92, 93)
student2 = Student('구숙정', 90, 80, 95, 87)
print( student1 > student2 ) # 원래 '>'는 크기비교로 사용했다.
→ 객체끼리 크기비교를 해보자. (성적정보에서 크기 비교한다고 하면, 총점(성적) 비교를 한다.
→ 연산자 재정의
def __gt__(self, student):
return self.get_sum() > student.get_sum()
나의 총점과 넘겨받은 학생의 총점을 비교해서
더 크며 참, 더 작으면 거짓
student1 = Student('김성필', 93, 83, 92, 93)
student2 = Student('구숙정', 90, 80, 95, 87)
print( student1 > student2, student1.get_sum(), student2.get_sum())
- 문자와 문자를 놓고 정의내리면 객체 총합의 점수를 비교하자.
프로그래밍 언어로 하고 싶은 건 많기에 파이썬 설계한 사람이 많이 넣어두었다. 그래서 다양한 문법이 들어있다.
하나를 배워서 익숙해지면 좋지만, 그렇지 않다면 익히기 어렵다.
결혼을 하게 되면, 다양한 모습을 보게 된다.
이것저것 잘 다루면 조금 낫다.
클래스 변수와 클래스 메소드
- 인스턴스가 속성과 메소드를 가질 수 있음
- 클래스도 속성과 메소드를 가질 수도 있음
클래스 속성(변수)
- 클래스 속성(변수) 만들기 - 클래스 변수는 ‘class 구문 바로 아래’에 선언
class 클래스_이름:
클래스_변수 이름 = 값 # 'class 구문 바로 아래' 여기
# 이 아래부터 클래스 구현 코드 작성
- 클래스 속성(변수)에 접근하기
클래스_이름.클래스_변수_이름
클래스 변수와 클래스 메소드
- 클래스 속성(변수)
- 클래스 속성(변수) 만들기: 클래스 변수는 ‘class 구문 바로 아래’ 에 선언
- 클래스 속성(변수)에 접근하기
import time
class Student:
count = 0
def __init__(self, name, korean, math, english, science):
self.name = name
self.korean = korean
self.math = math
self.english = english
self.science = science
Student.count += 1 # 클래스 변수에 접근
print('{}번째 학생 데이터가 생성되었습니다.'.format( Student.count ))
time.sleep(2)
students = [
Student('김성필', 93, 83, 92, 93),
Student('구숙정', 90, 80, 95, 87),
Student('박혜진', 88, 83, 81, 81),
]
# 클래스 변수에 접근
print('현재까지 생성된 학생 데이터는 {}명입니다.'.format( Student.count ))
class 클래스_이름:
클래스_변수 이름 = 값
# 이 아래부터 클래스 구현 코드 작성
클래스_이름.클래스_변수_이름
class Tiguan():
count = 0
def __init__(self, name):
self.name = name
Tiguan.count += 1
t1 = Tiguan('메리')
t2 = Tiguan('쫑’)
print( t1.name )
print( t2.name )
print( Tiguan.count )
객체를 일일히 가질 필요없이, class만 알고 있으면 된다.
설계도 = 객체 생산 시스템
클래스 메서드(멤버 함수) 만들기
class 클래스 이름:
@classmethod
def 함수_이름(cls, 매개변수):
pass
- ‘@’로 시작하는 것을 파이썬에서는 ‘데코레이터’ 라고 하며 ‘꾸며주는 것’이라는 의미
- 클래스 메서드(멤버 함수)의 첫 번째 매개변수 클래스 자신이다. 일반적으로 cls라는 식별자를 사용.
클래스 메서드(멤버 함수) 만들기
class Student:
# 클래스 변수 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
count = 0
students =[]
# 클래스 함수 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
@classmethod
def print(cls):
print('----- 학생 목록-----')
print('이름\\t총점\\t평균')
for student in cls.students:
print(str(student))
# 인스턴스 함수 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
def __init__(self, name, korean, math, english, science):
self.name = name
self.korean = korean; self.math = math
self.english = english; self.science = science
Student.count += 1 # 클래스 변수에 접근
Student.students.append(self)
def get_sum(self):
return self.korean + self.math + self.english + self.science
def get_average(self):
return self.get_sum()/4
def __str__(self):
return '{}\\t{}\\t{}'.format(self.name, self.get_sum(), self.get_average())
Student('김성필', 93, 83, 92, 93)
Student('구숙정', 90, 80, 95, 87)
Student('박혜진', 88, 83, 81, 81)
Student.print()
- 전체 학생 개개인은
- 반 단위는 class에서 관리
파이썬 → PyQt → 데이터분석 (어떻게 코딩을 하여 값을 구할 수 있는가?)
앞으로 2주 정도 더 배워나가게 되면, 코딩에 대한 스트레스가 줄어들 것이다.
1~8장 연습문제