한 주 요약: 파이썬, 머신러닝, 통계학, QCC를 다 한번씩 했다.
파이썬 기초를 잡는 것에 방점을 두었던 한 주.
통계학과 머신러닝 강의를 많이 못들어서 다음주에는 그것들 되도록 빠르게 들어보도록 하겠다.
내가 빠른 속도로 공부하는 사람은 아니라는 게 다시한 번 느껴졌다.
이 시스템이 나에게 수련이다.
많은 게 밀려 있다는 생각에 마음이 편하진 않지만 이 또한 내가 해결해야할 어떤 미션이자
삶의 결정적인 고난 넘기기라고 생각하면서 도전적으로 임해보겠다.
최선을 다해서 이번주의 미션 파써블을 완수해보겠다. 이걸 해결하면 나는 정말 의미있는 성장을 하는 거라구!
현재도 부담 해소되어 좋은 게 되고, 나중을 위한 좋은 기억이 될 것이니 이떄다! 잘됐다! 어서오세요! 하는 마음으로 겪어보겠다.
내가 싼 똥 ( 깊은 학습하는 습관으로 인해 빠른 학습에 적응 느림) 을
내가 치우는 연습이다 (빠르게 할 수 있는 부분을 찾아서 그 부분들만이라도 빠르게 끝내기).
지금은 그냥 진도를 쭉 빼야지 별 수 없다.
운동화 고를 틈도 없이 급한대로 맨발로 뛰어야 되는 상황이랄까.
그렇다.
아무쪼록...
나에게 위로 한마디 하겠다.
여기는 그냥 주저리다.
나는 느리게 갈 수 있지만 멈추지 않는다. 실제로 멈추지 않는다.... 나는 브레이크가 없는 천천히 가는 토마스 기차드아악!
나는 깊게 이해하고 있다. 시험결과에 너무 일희일비하지 않고 오늘 어제보다 하나 더 안 그것에 집중하고 있다. 이건 좋은 점이다.
진짜로 ‘의미 있는 배운 점, 이 캠프를 통한 성장'에 방점을 두고, 더 개선되고 성장한 모습과 실력과 인내력을 갖추기 위해 노력하고 있다.
그리고 주어진 학습을 충실하게 임하지만 끌려간다는 생각 말고, 내가 주인이라는 마음으로 주체적으로 임하고 생각하고 있다.
캠프에서 권장하는 시간표 앞뒤로 나의 주체적인 학업계획과 체력유지 계획을 포함해 생활하고 있다. 앞으로도 그렇게 할 것이다.
집중하기도 하지만 큰 그림을 보기도 할 것이다. 결국 무엇을 할 것인가? 취업의 목표와 방향성을 틈틈이 생각할 것이다.
설사 내가 이 분야를 잘 못하는 사람이라고 해도 괜찮다. 그러니까 더 계속 해야 한다. 좋아는 하지만 잘 못한다면 잘 할때까지 하면 된다.
만약 내가 적성이 부족한 사람이라고 해도 괜찮다. 꾸준함 없이 꽃피는 적성 없다. 최고가 아니라도 잘 하는 선은 넘을 수 있다.
수많은 공부 중 처음 해본 어떤 게 적성에 맞다면 운이 좋은 게 아닐까. 안맞는 공부가 세상에 얼마나 많겠어. 그럴 수 있다.
그치만 계속 하고 계속 열심히 하고 꾸준히 한다면 결국 어떤 선을 넘게 될 것이다. 뇌에 새로운 신경망이 생길때까지 버틸 것이다.
무에서 유가 될때까지 계속 하는 것은 내 인생 전체로 전문이야. 계속 해보는 건 자신있다.
어렸을 때 수학을 다른 것보다 못했고 그 자체가 역경이었지만 나중에는 수학을 다른 것보다 잘하게 되었다. 이 경험이 나에게 힘을 주듯이
지금 이 것을 잘 못하지만 인풋이 계속 되면 나중에는 머리가 생겨서 잘하게 될 수밖에 없다. 지금의 경험도 미래의 내게 힘을 줄 것이다.
지금 배우고 있는 이 분야를 언젠가 나의 ' 잘하는 것 리스트'에 올릴 것이다. 반.드.시~
🐱👤 토요일 하루 요약
베이직반 과제 - 라이브세션 3 복습
🐱👤 일요일 하루 요약
베이직반 과제 - 라이브세션 4 복습
📅 오늘의 일정 (4월 13일)
| 12:00 - 12:50 | 🐍 파이썬 기초 라이브세션 복습 | ⬜ |
| 12:50 - 13:00 | 🧘 휴식 | ⬜ |
| 13:00 - 13:50 | 🐍 파이썬 기초 라이브세션 복습 | ⬜ |
| 13:50 - 14:00 | 🧘 휴식 | ⬜ |
| 14:00 - 14:50 | 🐍 파이썬 기초 라이브세션 복습 | ⬜ |
| 14:50 - 15:00 | 🧘 휴식 | ⬜ |
| 15:00 - 15:50 | 🐍 파이썬 기초 라이브세션 복습 | ⬜ |
| 15:50 - 16:00 | 🧘 휴식 | ⬜ |
| 16:00 - 16:50 | 🐍 파이썬 기초 라이브세션 복습 | ⬜ |
| 16:50 - 17:00 | 🧘 휴식 | ⬜ |
| 📘 함수/클래스 복습 + 과제 | ⬜ | |
| 18:00 - 18:40 | 과제 | ⬜ |
| 18:40 - 18:50 | 📝 TIL ① | ⬜ |
| 18:50 - 19:00 | 🧘 휴식 | ⬜ |
| 19:00 - 19:40 | 과제 | ⬜ |
| 19:40 - 19:50 | 📝 TIL ② | ⬜ |
| 19:50 - 20:00 | 🧘 휴식 | ⬜ |
| 20:00 - 20:40 | 과제 | ⬜ |
| 20:40 - 20:50 | 과제 | ⬜ |
| 20:50 - 21:00 | 블로그 TIL | ⬜ |
| 21:00 - 22:30 | 🌙 불끄고 잘준비 시작, 폰 금지 | ⬜ |
| 22:30 | 🌙잠 | ⬜ |
| 6:00 | 기상 | ⬜ |
😊토요일 공부내용 메모
🔵 베이직반 과제 - 라이브세션 3 복습
🧶 과제에 필요한 클래스부터 다시 복습했는데 문제 못풀겠어서 그 전 강의인 자료구조랑 함수쪽부터 차근차근 학습하기로함.
하다보니 너무 차근차근 한 것 같기도 한데 이게 맞는 방법 같기도 하고 혼란.
세션 3 필기
- 1,2주차 수업내용 복습
- 자로형 및 연산자
- 자료형: 정수, 실수, 문자열 같은 것들 (기본 자료형과 클래스 자료형이 있다)
- 변수선언 하면: 자료형이 같이 선언된다 (파이썬은 자동이다)
- 같은 자료형끼리만 연산된다는 사실을 좀 강조했었다.
- 표준 입출력
- 표준 출력: print() 원하는 스타일로 프롬프트 창에 출력가능
- 표준 입력: input() 키보드로부터 문자열을 입력받아 변수에 값을 할당할 수 있음. 어떤 입력하더라도 문자열로 받아들임. 숫자인 경우 형변환이 필요.
- 그래서 형 변환까지 배웠었다.
- 조건문과 반복문
- 조건문: if 문, 조건식에 따라서 프로그램의 분기를 나누고 싶은 경우에 사용함.
- (비교연산자> < , 논리연산자 and or not 등)
- 여기서 또하나 기억해야 할 것은: if 문에 0을 넣거나 0.0, "" [] 같이 빈 것을 넣으면 False가 나오고 -100, " ", "hello" 처럼 값이 있는 걸 넣으면 True가 나온다.
- 반복문의 종류: for, while 문이 있다.
- 사용법: 프로그램을 반복하고 싶은 경우 (특정 알고리즘 반복)에 사용한다. for문을 쓰는 경우: while문을 쓰는 경우:
- 반복문 안의 제어문의 종류
- break (반복문을 빠져나올 때)
- continue(현재 반복을 건너뛰고 다음 반복을 실행할 때)
- else(반복문이 정상적으로 완료 되었을 때 실행하는 구문)
- break문으로 빠져나왔을 때는 else 구문이 실행 안된다.
- 자료구조
- 리스트, 튜플, 딕셔너리, 집합
- 이건 언제 쓰이냐면: 데이터를 효율적으로 저장하고 관리하는 자료형
- 자료구조마다 다양한 특징이 있음
- 리스트의 특징: 순서가 있다(인덱스로 요소를 참조한다), 값이 변경 가능하다
- 튜플의 특징: 순서가 있다, 값 변경 불가능하다
- 딕셔너리: 순서가 없다, 키와 밸류형으로 이루어져 키로 밸류를 찾는다. 그런데 약간 순서가 패치됨. 3.0정도부터는 우리가 데이터를 넣은 순서대로 출력해주고 있긴 함, 그 전에는info[”age”] = 30 라고 입력한 후에print(info)했을 때 입력한 순으로 나왔다.)
- orderdict를 써줘야
- info[”name”] = “효정”
- 셋의 특징: 순서가 없다, 중복값이 없는 자료구조(어떤 상황에서는 굉장히 효과적으로 쓸 수 있는거다), 집합 연산이 가능하다. (랜덤출력에 가까움. 우리가 이해하고 있지 않은 복잡한 규칙에 따라 출력이 되기 때문에 랜덤이라고 하는거임. 사실 해시테이블과 해시값을 배우면 이 원리대로 추출된다는 걸 알게 됨. 몰라도 됨)
- 데이터프레임(pandas) -2차원리스트처럼, 테이블형태의 데이터를 다룸. pandas 메서드 들이 강력하다.
- 자료구조를 효과적으로 잘 다루는 것이 프로그래밍에서 아주 중요하다.
- 함수: 특정 작업을 수행하는 코드 블록 or 입력값이 어떻게 출력될지 정의하는 구문, 코드 재사용성이 높아짐
- 클래스: 객체 지향 프로그램의 핵심 역할을 하는 문법임
- 객체가 뭐냐면: 오브젝트라고 표현. 물건 사물 대상.
- 캐릭터에 객체를 비유한다면, 피카츄의 속성(=데이터)은 전기, 쥐. 스킬(=함수): 백만볼트
- 클래스는 뭐냐면: 그 객체가 가진 고유한 속성(데이터)와 취할 수 있는 행동(함수) 가 있다- 그것들을 클래스로 정의해놓은 것임.
- 객체를 데이터와 함수로 표현하기 위해 클래스라는 문법을 배운다
- 데이터와 함수는 항상 같이 쓰이기 때문이다. 모든게 클래스다.
- [1,2,4,10].sort() 이런 식으로 쓸 때 데이터와 그 데이터에 맞는 함수가 있는 건데 그게 같이 정의가 되어있으면 개발자가 쓰기 편하기 때문이다. 전통적인 씨언어까지는 클래스가 없었는데 프로그램 규모가 커지고 복잡하다보니 클래스 형식으로 작업할 일이 많아졌다. 둘이 함께 다니니까. 그리고 특정 개체를 표현할 때는 데이터와 함수가 같이 꼭 필요하다 보니까 그런 문법을 만든거다.
- 넘파이도 클래스임. 클래스 안에 메서드들이 있는 것이다.
- numpy.array(데이터).mean()
- 라이브러리 안에 클래스가 있는 것이다. 라이브러리에 함수만 들어갈 수 있고 변수만 들어갈 수도 있는데 상수도 되고 하는데 일반적으로 클래스 단위로 많이 설정한다. 라이브러리 안에 클래스가 있다고 봐야 한다. 라이브러리는 우리가 사용하기 좋은 클래스와, 함수와, 혹은 변수들의 집합이라고 보면 되는 것이다.
- 자로형 및 연산자
1,2,3,4번이 다 되면 5,6은 보조적인 역할로 쉽다. 프로그램에서의 핵심은 1234이다.
🐬
- 2차원 리스트 복습 시작
- 이 테이블로 함
- b. 이 테이블 안 요소의 개수는: 3개임테이블 0이 가리키는 것은 : 학생 3, 이것의 요소 개수는 4개이거 테스트해보면 학생 1, 학생2, 학생3 에 대해 3가지로 나온다.print(stu)
- for stu in table :
- #table[0]의 요소 개수: 4
- #테이블의 요소 개수: 3
그리고 학생 안의 과목 점수 하나 하나 접근하고 싶으면 어떻게 하냐면: #테이블 내 학생 1~100에 대한 처리 (학생별로 접근. = 행별로 접근!!!)
for stu in table :
#학생 1명에 대한 처리 (학생 한명 한명마다의 정보를 갖고 있는 상태) (열별로 접근!!!)
for score in stu : (이렇게 쓰면 점수 하나씩 접근이 됨)
print(score, end=’ ’)
end 써주는 이유는 저거 안쓰면 세로로 개행되어서 아래와 같이 나옴.
end라는 파라미터를 써주면 가로로 나오는데 다 붙어서 나옴 ;; 그래서 공백을 넣어줘서 띄어쓰기 해서 가로로 출력하도록 해주는 것임.
그리고 print() 를 넣어주었기 때문에 학생 리스트 별로 끊어서 개행되는 것임.
😊일요일 공부내용 메모
🔵 베이직반 과제 - 라이브세션 3 복습
# ['국어', '영어', '수학', '과학'],
table = [
[85, 82, 88, 40], #학생1
[92, 95, 90, 90], #학생2
[78, 85, 92, 80] #학생3
]
# 학생별로 접근 (행별로 접근)
#학생별로 평균점수 얻어기
for stu in table :
#열별로 접근
#학생 1명에 대한 스코어는 다 여기에 있음.
total = 0
#변수에 0선언부터 해준다.
#학생 1명에 대한 점수 합을 저장할 변수를 선언한거다.
#0에다 85더하고, 그 담에 82 더하고, 이런식으로 진행된다.
#계속 값을 업데이트 하는 것과 같다.
for score in stu :
total += score
#total = total + score
print(total / len(stu))
# sum 함수 없이 위와 같이 적을 수 있어야 한다.
# print(sum(stu) / len(stu)) 함수로는 이렇게 적을 수 있다.
결과
73.75
91.75
83.75
#이제는 과목별로 평균값을 얻을거야.
#그러면 세로방향인 열별로 접근을 해야겠지?
#근데 열별로 있는 국어 85, 92, 78 첨부터 한꺼번에 바로 얻어올 수는 없다.
#과정을 써보겠다. 이번에는 인덱스로 접근해볼 것이다. 열 이름은 col 이라고 하겠다.
# ['국어', '영어', '수학', '과학'],
table = [
[85, 82, 88, 40], #학생1
[92, 95, 90, 90], #학생2
[78, 85, 92, 80] #학생3
]
# for col in range() 구문을 쓸 것인데, range()안에 0:5 라고 쓰게 되면 나중에 과목을 추가할 시 코드를 바꿔야 한다. 좋지 않음.
# 과정1. range 안에 과목 갯수가 들어가면 된다. #과목갯수 어떻게 얻을지 답 안보고 생각해보자!!!!
#len(table[0]] 아닐까여??? 맞았음. 물론 0,1,2,3, 암거나 넣어도 됨.
for col in range(len(table[0])) : #과목의 수: 테이블의 첫열 학생 1만의 특정 정보 [85, 82, 88, 40]의 0,1,2,3번을 담고있고 총 4개임. col은 결국 과목의 번호를 나타냄
subject_total = 0 #과목별 점수 합계를 구할 변수
for row in range(len(table)) : #학생의 수 정보 0,1,2를 담고 있음.
# table[학생번호][과목번호]
subject_total += table[row][col] # 0 을 넣으면 0자리 학생껏만 나옴.
#시작하면 col값은 0으로 고정되어있고 row가 계속 바뀜.
print(round(subject_total / len(table),2) , '는 과목 ', col, '의 평균')
결과
85.0 는 과목 0 의 평균
87.33 는 과목 1 의 평균
90.0 는 과목 2 의 평균
70.0 는 과목 3 의 평균
table = [
[85, 82, 88, 40], #학생1
[92, 95, 90, 90], #학생2
[78, 85, 92, 80] #학생3
]
for col in range(len(table[0])) :
print(col, end=' ')
결과
0 1 2 3
# ['국어', '영어', '수학', '과학'],
table = [
[85, 82, 88, 40], #학생1
[92, 95, 90, 90], #학생2
[78, 85, 92, 80] #학생3
]
#학생별 평균점수를 얻는 계산 할 때 학생 1 리스트 좌에서 우, 학생 2 리스트 좌에서 우 방향으로 순회를 했음.
#과목변 평균점수를 얻을 때는 국어 세로, 영어 세로 이런 방향으로 순회를 했음.
#학생별로 평균점수와 과목별 평균점수 쿼리의 차이가 어디서 나는지 봐보자.
#학생별 평균점수
for row in range(len(table)) : #1
stu_total = 0
for col in range(len(table[0])) : #3
stu_total += table[row][col]
print(stu_total/len(table))
#과목별 평균
for col in range(len(table[0])) : #1
subject_total = 0
for row in range(len(table)) : #3
subject_total += table[row][col]
print(subject_total/len(table))
# 1과 3의 위치가 서로 바뀌어있음을 알 수 있다.
#이거는 이해해야 하는 부분이다 암기보다는
#zip 함수 기억나는 사람~
#zip 함수: 여러 리스트의 값을 묶는데 같은 인덱스끼리 묶는다. 국어끼리, 수학끼리.
print(list(zip(*table)))
# *table 표시는 무슨뜻이었냐면, 언패킹이라는 용어로, 개별 요소(학생세명)들이 집 함수 안에 인자로 들어간다는 말임.
#지금처럼 *table 같이 쓰는 건 리스트나 튜플의 요소들을 하나씩 꺼내서 함수의 개별 인자로 전달하겠다는 의미
# 묶여 있는 자료(리스트, 튜플 등)를 풀어서 낱개로 분리하는 것, 각 과목별로 점수를 묶고 싶을 때 zip을 활용,
[(85, 92, 78), (82, 95, 85), (88, 90, 92), (40, 90, 80)]
2차원 데이터를 다루는 방법 이해 깊어짐.
zip(*table)
- table은 2차원 리스트 (행 중심)
- *table → 행들을 하나씩 꺼내서 zip()에 넣어줌
- zip() → 과목별(열)로 재조합
그 결과 행 중심 데이터 → 열 중심 데이터로 변환됨.
이 두가지를 같이 쓰는 경우는 이차원 데이터를 행 중심에서 열 중심으로 바꿔 보고 싶을 때가 많다.
각 기능 요약하면
Zip 함수는 인덱스별로 재조합해 튜플화,
* 연산자는 리스트 요소 하나씩 꺼내 함수인자화
과목별 점수, 연도별 통계, 열 단위 평균 계산 등
→ 2차원 리스트를 가로에서 세로로 바꾸고 싶을 때
→ 거의 무조건 zip(*table)
if, for, while 조건문/반복문 연습
과제를 위한 클래스 학습 벼락치기.
그런데 과제를 풀기까지 나의 복습 진도가 도달하지 못함.
그치만 공부자체는 잘 되고 있어서 현재 코스에서 갑자기 건너뛰기 좀 그렇다...
과제를 지금은 제출 못하지만 공부 할만큼 하고 문제를 계속 풀어야겠음. 문제 3개밖에 안되니까 클래스 다 공부하면 잘 풀수 있지 않을까..?
# 4. 클래스 변수와 인스턴스 변수
print("\n======= 클래스 변수와 인스턴스 변수 =======")
class Pokemon:
# 클래스 변수
count = 0
pokedex = {}
def __init__(self, name, type):
# 인스턴스 변수
self.name = name
self.type = type
# 클래스 변수 업데이트
Pokemon.count += 1
Pokemon.pokedex[name] = type
@classmethod
def print_pokedex(cls):
"""포켓몬 도감 출력 (클래스 메서드)"""
print("\n==== 포켓몬 도감 ====")
for name, type in cls.pokedex.items():
print(f"{name}: {type}타입")
print(f"총 포켓몬 수: {cls.count}")
# 인스턴스 생성
pikachu = Pokemon("피카츄", "전기")
charmander = Pokemon("파이리", "불")
squirtle = Pokemon("꼬부기", "물")
bulbasaur = Pokemon("이상해씨", "풀/독")
# 인스턴스 변수 접근
print(f"첫번째 포켓몬: {pikachu.name}, {pikachu.type}타입")
# 클래스 변수 접근
print(f"포켓몬 도감에 등록된 수: {Pokemon.count}")
# 클래스 메서드 호출
Pokemon.print_pokedex()
# 클래스 변수 공유 확인
print(f"\n모든 인스턴스는 같은 포켓몬 도감을 공유합니다:")
print(f"Pokemon.pokedex와 pikachu.pokedex는 같은 객체? {Pokemon.pokedex is pikachu.pokedex}")
😊생활관리
파이썬 다지기 할 수 있어서 좋긴 했는데...
모아보니 조금 한 것 같다.
하나 하나 이해하다보면 오래걸려서 이걸 다 언제 어떻게 해야하는건지 고민이다.
일단 오늘 한것만 해도 알고 나니
눈이 좀 뜨이는 것 같긴 하다
전에는 머리에 저장된 게 없어서 뭔가를 봐도 스쳐지나가는 느낌이었다면
이제는 어 저거 그거네 하면서 눈에 띄는 느낌이 좀 늘었다.
그치만 조금이다. 그래도 의미 있다고 봐야겠지.
주말에 공부하면 진짜 다 정복할 수 있을 줄 알았는데 ;;; 아니었나보다.
내가 파이썬을 우습게 본 걸까 아니면 그저..
나란 녀셕이 우스운 녀석인 것일까 허허.
많은 강의가 밀려있는데
뭔가가 밀려있으면 안된다고 생각하고 있어서
잘 못하는데 잘하고 싶다고 생각하고 있어서
전반적으로 부담스럽고 마음이 무겁다.
그치만 글 쓰면서 털어낸 것 같다.
뭐어때.. 공부했는데.. 공부했다는 건 진실이잖아.
담주에도 골고루, 잘, 성실히, 꾸준히, 문제 풀 수 있도록, 프로젝트 할 수 있도록, 진도 잘 뺄 수 있도록 해보곘다
퐈이팅!!!!!!!!!!!!!!