Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- ai 새싹 부트캠프 5일차
- 데이터관련면접
- 통계용어 정리
- 새싹 AI데이터새싹 엔지니어 부트캠프 2일차
- ai 새싹 부트캠프 6일차
- ai 새싹 부트캠프 7일차
- 데이터분석가면접준비
- ㅂ.
- 데이터분석가
- 취준생
- Til
- ASAC
- 새싹 AI데이터새싹 엔지니어 부트캠프 1일차
- 새싹 AI데이터새싹 엔지니어 부트캠프
- 새싹 AI데이터새싹 엔지니어 부트캠프 3일차
- T
- X
- ai 새싹 부트캠프 4일차
Archives
- Today
- Total
데이터 공부기록
[Python] Class 1 본문
1. 기본 설명
기본적인 목적 : 코드들을 기능 중심으로 구조화!!!!!
==> 함수 : 입력 / 출력 / 기능
==> 클래스 : 내가 필요한 대상(속성, 기능)
==> 패키지 : 필요한 여러가지 들을 모아둔!!!!!
pandas, scikit-learn + optuna, TF/PyTorch ,,,,,
DF DF/Array Tensor(Array)
===> 내가 불편해서 필요한거 만들겠다!! 자주 사용되는 것들
체계적으로 기능 중신들로 어떻게 구성을 할까
참고 ) 데이터 수집, 데이터 분석, 머신러닝 : 함수정도면 충분함!!
딥러닝 : TensorFlow ---> Keras : 함수
프로젝트(최신것) PyTorch : 클래스
2. 예시
Q .학생들에 대한 국어, 영어, 수학, 과학 점수들을 처리하고자 함
1) 주어진 정보들을 파이썬의 특징을 활용해서 꾸역꾸역
=> 우리반 전체 학생들에 대해서 : 리스트
개별 학생에 대한 정보 : dictionary
students = [
{"name":"AAA", "korean":98,"math":93, "english":79, "science":95},
{"name":"BBB", "korean":78,"math":87, "english":87, "science":90},
{"name":"CCC", "korean":90,"math":85, "english":89, "science":92},
{"name":"DDD", "korean":80,"math":96, "english":99, "science":93},
{"name":"EEE", "korean":70,"math":80, "english":89, "science":95},
]
우리반 학생별로 4과목 성적에 대한 총점 / 평균 점수를 출력하자
출력 : 학생이름 , 4과목 총점, 4과목에 평균 출력
print("이름","총점","평균", sep="\t") # sep : 출력대상 사이 . end : 다 출력하고 뭐 (줄바꿈)
for student in students:
# 개별 학생에 대해서 할 일에!!
score_sum = student["korean"] + student["math"] \
+student["english"] + student["science"]
score_avg = score_sum /4
print(student["name"], score_sum, score_avg, sep="\t")
- sep ="\t" : \t를 기분으로 구분
-2) 학생정보 생성 함수
# 2) 학생들에 대한 정보를 생성하는 함수!!!!!!
# ===> 학생마다 정보를 만들 때 키값이 반복이 되고 있다..
# 귀찮으니,,,,함수로 만들어서 처리해보자!!!!
# ===> 가장 반복없는 기본이 되는 정보들만 가지고 생
def create_student( name, kor, math, english, science):
return{"name" : name , "korean":kor,
"math": math, "english":english,
"science":science}
- 단순화
def create_studnet( n, k, m, e, s):
return { "name":n, "korean":k,
"math":m, "english":e,
"science": s}
# ---> 함수로 개별 학생에 대한 정보를 생성하자!!!!
students=[
create_studnet("AAA", 98,93,79,95),
create_studnet("BBB", 78,87,87,90),
create_studnet("CCC", 90,85,89,92),
create_studnet("DDD", 80,96,99,93),
create_studnet("EEE", 70,80,89,95)
]
#students
print("이름","총점","평균", sep="\t")
for student in students:
print(student_to_string(student))
- 3 필요한 기능들을 최대한 함수화
#3) 필요한 기능들에 대해서 다 함수화를 최대한 해보자!!
# 1명 학생에 대한 정보를 생성하는 함수
# 1명 학생에 대한 정보를 바탕으로 총점을 구하는 함수
# 1명 학생에 대한 정보를 바탕으로 평균을 구하는 함수
# 1명 학생에 대한 정보를 출력하는 함수(이름, 총점, 평균)
# 1명 학생에 대한 정보를 생성하는 함수
# 입력 : 이름, 국어. 수학, 영어. 과학
# 기능 : 학생 정보를 Dict 생성
# 출력 : 1명 학생 정보 Dict
def create_studnet( n, k, m, e, s):
return { "name":n, "korean":k,
"math":m, "english":e,
"science": s}
# -1명 학생에 대한 총점으로 계산해주는 함수
# 입력 : 1명 학생의 정보
# 충점을 꼐산
# 출력 : 충점
def student_get_sum( studnet ): # student = {"name" : "AAA"}
score_sum = studnet["korean"] + studnet["korean"]\
+ studnet["english"]+ studnet["science"]
return score_sum
# - 1명 학생에 대한 4과목 평균을 함수
# - 입력 : 학생 1명에 대한 정보
# 기능 : 4과목 점수 평균 계산
# 출력 : 평균 점수
def studnet_get_avg( studnet ):
score_avg = student_get_sum(studnet) / 4
return score_avg
# - 1명 학생에 대한 정보 출력하는 함수/기능!!!!
# - 입력 : 학생 1명에 대한 정보
# 기능 : 정보를 출력 문자열생성 ->이름, 총점, 평균
# 출력 : 출력할 문자열
def student_to_string(studnet):
temp = "{0}\t{1}\t{2}".format( studnet["name"],
student_get_sum(studnet),
studnet_get_avg(studnet))
return temp
# 함수로 개별 학생에 대한 정보 생성
# ---> 함수로 개별 학생에 대한 정보를 생성하자!!!!
students=[
create_studnet("AAA", 98,93,79,95),
create_studnet("BBB", 78,87,87,90),
create_studnet("CCC", 90,85,89,92),
create_studnet("DDD", 80,96,99,93),
create_studnet("EEE", 70,80,89,95)
]
#students
print("이름","총점","평균", sep="\t")
for student in students:
print(student_to_string(student))
참고) 파이썬의 문자열을 표현하는 방식 크게 3가지
% 연산자를 활용해서 표현
format() 함수로 표현
f-string 통해서 표현
===> 나는 f-string으로 사용
a = 345
b = 86
print(f"나의 총점 : {a}, 평균:{b}")
# 나의 총점 : 345, 평균:86
M1 : Class 생성
##### 일반적으로 프로그램의 코드를 작성하는 스타일과!!!!
# ===> 객체지향으로 설계 : Class --> Object
# : 필요한 기능 중심으로, 조립을 하는 방식( 유기적인 관계 ..)
# --> 많은 시행착오, 경험, 노하우!!!!
# ( ==> 프로그램설계 컨설턴트 : 컨설팅! ==> 단가 겁나 비싸요)
# + DB
# ==> 동일한 기능이여도 어떻게 설계, 구조를 하느냐!!!!!!
# 클래스Class : 속성+ 기능(뭔가 틀을 생성하는게 Class)
# 점수,이름 :속성 --> Property
# 평균구해주세, 총점계산 : 기능 --> Method
# 객체 : 클래스를 기반으로 생성된 구체적인 대상!!!!
# self : 자기 자신을!!!!!!
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
students=[
create_studnet("AAA", 98,93,79,95),
create_studnet("BBB", 78,87,87,90),
create_studnet("CCC", 90,85,89,92),
create_studnet("DDD", 80,96,99,93),
create_studnet("EEE", 70,80,89,95)
]
student
- 적용 에시
students[0].name
# 'AAA'
students[0].korean
#98
students[3].name
#'DDD'
2) 클래스 내부의 필요한 기능 추가/ 설계
# 클래스 내부에 ... 기능적으로 필요한 것들을 추가/ 설계 !!1
====> 너 무슨 과목은 몇점이니?
====> 너의 총점은 얼마니?
class 클래스명: # 대문자로 표기
def __init__(self,,,,,,,):
self.설정한 속성값 = ~~~₩
def 메서드/기능함수(self,,,,,)
~~~~~~~~~~~
class Student: # 일반적인 함수와 구별하기 위해서 대문자로 시작
# 생성자 : 필용한 초기 속성들에 대한 초기화!!!!!
# ==> 파이썬에서 클래스 생성을 위한 미리 만든 특별함수
# _(양옆으로 2개)
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):
score_sum = self.korean + self.math + self.science + self.english
return score_sum
def get_avg(self):
score_avg = self.get_sum() / 4
return score_avg
def to_string(self):
temp = "{}\t{}\{}".format(self.name, self.get_sum(),self.get_avg())
return temp
students=[
Studnet("AAA", 98,93,79,95),
Studnet("BBB", 78,87,87,90),
Studnet("CCC", 90,85,89,92),
Studnet("DDD", 80,96,99,93),
Studnet("EEE", 70,80,89,95)
]
students
""
[<__main__.Studnet at 0x1078b0220>,
<__main__.Studnet at 0x1078b0640>,
<__main__.Studnet at 0x1078b0310>,
<__main__.Studnet at 0x107304eb0>,
<__main__.Studnet at 0x107304fd0>]
"""
students[0].name
# students[0].name
3) SP Method
# ----> 특별 Method
# 기본적인 연사자들을 내가 설계한 클래스들 사이에서
# 동작을 정의를 할 수 있음!!! + , >
# => 이런 식으로 students[0] > student[1]
# 기준은 나는 총점으로 하겠다... 국어 성적 ... 설계에 따라서
Special Method : === (eq), !=(ne), > : (gt), >= : (ge)
< : (lt), <= : (le)
class Student: # 일반적인 함수와 구별하기 위해서 대문자로 시작
# 생성자 : 필용한 초기 속성들에 대한 초기화!!!!!
# ==> 파이썬에서 클래스 생성을 위한 미리 만든 특별함수
# _(양옆으로 2개)
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):
score_sum = self.korean + self.math + self.science + self.english
return score_sum
def get_avg(self):
score_avg = self.get_sum() / 4
return score_avg
def to_string(self):
temp = "{}\t{}\{}".format(self.name, self.get_sum(),self.get_avg())
return temp
##################### -> 2의 학생 클래스 끼리의 연산자들을 사용해서 비교
# 저의 기준 : 4과목 총점을 기준으로 비교 !!!!!!!!!!!!!!(개인별로 목적에 맞춰서....!)
# sp mathod =
def __eq__(self, value): # std1 == std2, 총점
return self.get_sum() == value.get_sum()
#return self.korean == value.get_sum()
def __ne__(self, value):
return self.get_sum() != value.get_sum()
def __gt__(self, value):
return self.get_sum() > value.get_sum()
def __ge__(self, value):
return self.get_sum() >= value.get_sum()
def __lt__(self, value):
return self.get_sum() < value.get_sum()
def __le__(self, value):
return self.get_sum() <= value.get_sum()
students=[
Studnet("AAA", 98,93,79,95),
Studnet("BBB", 78,87,87,90),
Studnet("CCC", 90,85,89,92),
Studnet("DDD", 80,96,99,93),
Studnet("EEE", 70,80,89,95)
]
students
students[0].get_sum()
# 365
# ==> 클래스에 각 생성된 객체끼리 비교 연산자기능을 정의를 했고, 그 떄 정의가 총점을 기준으로!
# C번 학생하고 1번 학생하고 총점이 같니?
students[0] == students[1]
# False
- 지정된 연산자로 설정하는것
## 클래스
# ===> 필요한 속성값 : property ( 변수 값)
# ===> 필요한 기능 / 함수 : method ( 필요한 기능/ 함수) 클래스 내에서 필요한 기능들
+ 비교, + 이미 지정된 연산자들에서도 동작할 수 있도록 설계!!!
====> 내가 필요한 것들을 잘 설계해서 편하게 쓰자!!!
class Square:
def __init__(self, size):
self.size = size
def get_area(self):
return self.size * self.size
class Square:
def __init__(self, size):
self.__size = size
def get_area(self):
return self.__size * self.__size
## 내부 속성에 대한 접근을 기능적으로 따로 설계!!!!
# 1. 속성값을 나한테 알려주세요 !!! : ~~~ get
def get_size(self):
return self.__size
# 2. 속성값에 대한 변경~ !!! : ~~~~ set ~~~~
def set_size(self, value):
self.__size = value
s1 = Square(10)
s1.get_area()
# 100
s1.get_size()
# 10
- 설정값 20으로 변경
s1.set_size(20)
s1.get_area()
# 400