[교육&스터디]/[패스트 캠퍼스] 데이터 분석 부트캠프 9기

[데이터 분석 부트캠프] 3주차 진행 및 학습일지

icepack788 2023. 7. 6. 21:47

 

[패스트 캠퍼스] 데이터 분석 부트캠프 3주차!! 

이번주에는 '데이터 분석을 위한 Tool, Python를 배웠습니다!! 
(7월 1째주 어디감? 어디로 사라짐?????)
어떤 내용들을 배웠는지 저의 솔직한 리얼 후기&반성&회고를 통해서 만나보시죠!!

저번주 금요일 6/30일부터는 파이썬 강의가 시작되었습니다... 드디어 역경과 고난의 시작인가.. 
패스트 캠퍼스에서 주로 파이썬 보충강의를 해주시던(구글링의 결과 ㅎㅎ) 김상모 강사님께서  이번에는 파이썬 강의를 맡아주셨습니다!!

김상모 강사님께서는 (인터넷에 약력이 없어서 알려드려용) 아주대 대학원 IOT 전공이시거, 부천대 자동화 로봇과 겸임 교수이시면서, 현 스마트 팩토리 SW전문기업 컨시스 대표님이십니다. 지금은 강의하는 것이 너무 좋으셔서 일은 직원들 시키고 강의만 하고 계시다고 해요 ㅎㅎ 이 여름 시즌에 딱 시간이 되어서 저희 정규과정의 강사님으로써 초빙 되어 우리 데이터 분석 캠프 9기와 함께 하게 되었습니다~!! 

강사님께서 시작하면서 말씀해주신 것 3가지!!
1) 코딩시 생각해야할 5가지 순서 : 문제 이해 - 변수 고민 - 구조 고민 - 코딩 - 검증
2) 계속해서 볼 파이썬 교재(두꺼운거, 기초 설명 잘되어있는거) 하나쯤은 사서 가지고 있자
3) 한 가지 코드를 5번 정도 짜봐야 한다!! 그래야 온전히 이해한 것. 프로그래밍 실력은 마치 가우스 함수, 계단처럼 오른다.

(고등학교 수학 학원 선생님 말이 오버래핑되었다,, 수학 실력은 가우스 함수와 같아서 실력 상승하는 것이 안보이다가 어느 순간 껑충 뛰어버린다고,, 코딩도 비슷한 맥락인 것 같다,,)

위의 그래프 같이 많은 (노가다) 코딩 연습만이 이 한계를 뚫어낼 수 있다고 이야기해주셔서 '아~ 그렇구나' 하고 말았는데,,
막상 이게 하나하나 코드를 짜보고, 생각해보고, 쳐보고 하는 순간,, 아 왜 그런 말씀을 하셨구나를 알 수 있었습니다^^
과연 내가 데이터 분석 or 프로그래밍과 맞는건가 하는 현타까지도 선사한 파이썬,,,^^
쉽지 않겠다라는 예사롭지 않는 생각은 점점 현실이 되어만가는데,,, 늘어나는 복습량과 함께 머리속으로 들어가야하는 지식은 많아지고, 끝도 없네요 ㅎㅎ 역시 인생은 쉬운게 하나도 없군요 :) 개인적인 넋두리였구,
자 본격적으로  파이썬에 관련한 내용들에 대해서 알아보시죠!!


[3주차 : Python 학습 및 정리 내용] 

1. 진법의 이해
- 2진법, 10진법, 16진법(0123456789+ ABCDEF)
- 2진수를 뒤에서부터 4자리씩 끊어줌, 4자리씩 끊은 부분을 16진수로 변환
- 2진수 : 0b를 붙임, 0, 1 사용
- 8진수 : 0o를 붙임, 0~7까지 사용
- 16진수 0x를 붙임 0~F까지 사용

2. 컴퓨터 프로그램
- 컴퓨터에 일을 시키려면 인간이 컴퓨터에게 자세한 명령어들의 리스트를 주어야 한다
- 프로그램 : 컴퓨터가 수행할 명렁어를 적어놓은 문서, 시퀀스를 가져야함(차례, 단계)

3. 프로그래머에 대한 오해
- 개발자라고 하면 흔히 코더, 코딩 노예, 박봉, 야근이 많은 직업군이라고 알고 있음
- 체계적인 준비 없이 취업을 하는 경우 코더에 머무를 수밖에 없음, 프로그래머는 '기술 전문직'임

4. 인터프리터와 컴파일러
- 컴파일러 : 한꺼번에 기계어로 바꾸는 것(c, c++, java), 실행속도가 매우 빠름. 
- 인터프리터 : 한줄씩 기계어로 해석, 실행속도가 길어짐, 파이썬이 여기에 해당.

5. 파이썬 연산자 / 데이터 타입의 종류
- 숫자 자료형 : 정수, 실수, 복소수까지 지원
1) int = 정수
2) float = 실수(소수)
3) complex = 복소수
4) str = 문자열
5) list  = 자유럽게 변경이 가능한 여러 개의 데이터 묶음, [ ] 대괄호로 표현 
6) tuple = 생성 훙네 변경이 불가능한 여러개의 데이터 묶음, ( ) 소괄호로 표현
7) dict = key-vaule store 방식을 가지고 자료를 저장하는 구조 
8) bool  = 참, 거짓으로 표현하는 자료형 
- 사칙연산 : 덧셈, 뺄셈 ,곱셈, 나눗셈
- 그 외 연산
(1) 나눗셈 후 소수점 연사자 버리기 ( // )
(2) 나눗셈 후 나머지를 표시하기 ( % ) -> 중요!!
(3) 거듭제곱을 수하기(**) , 값을 정수로 만들기 int()
(4) 몫과 나머지를 함께 구하기 : dimod(5,2)

6. 실수 계산하기
- 값을 실수로 만들기 float()
- 나누기에서의 기본 값은 float 값이 나오게 됨! ' → 나누기 연산에 대한 데이터 타입은 '실수'로 약속화 되어있음.
- 문자열은 int를 사용해서 정수로 바꿔줄 수 없음, → float로 문자열을 실수로 바꿔주고 → 그것을 다시 int로 변환가능

7. 파이썬을 사용할때에 중요한 점 : 코딩을 바로 하려는게 아니라 ‘생각’ 먼저 해야함!

  • 문제 이해 -> 변수 고민(자료 구조) -> 구조 고민(알고리즘) -> 코딩 -> 검증

(1) 변수
- 변수는 값을 저장하는 상자로 생각할 수 있음
- 변수는 컴퓨터 메모리 공간에 만들어진다, 생성된 변수에는 얼마든지 다른 값으로 저장가능(가장 마지막 값),
  x(변수) = 100(상수)
- 문자열도 변수에 저장할 수 있음
- 변수의 이름은 ‘의미 있는 이름’을 사용하면 가독성이 좋아짐, 주석을 달 필요가 없음, 툴에 첫~두글자만 쳐도 바로 검색기능이 있기 때문에 변수이름은 길더라도 의미있게 쓰는게 나중을 위해서 좋음.
- 변수의 이름은 영문자와 숫자, 밑줄(_)로 이루어짐, 변수의 이름 중간에 공백이 들어가면 안됨
- 시작은 꼭 문자로 시작해야함(밑줄 시작은 가능), #과 같은 기호는 사용할 수 없음, 맨 처음이 아니라면 숫자도 가능

(2) 파이썬 변수와 입력 사용해보기
-  빈 변수 만들기 : None을 할당, 파이썬에서는 None은 아무것도 없는 상태를 나타내는 자료향 보통 다른 언어에서는 null이라고 표현
- input()으로 받아들이는 내용은 문자열로 처리됨

8. print() 문 뽀개기!! 
: 파이썬에 print() 함수는 보통 print() 안에 입력하고 싶은 값을 작은따옴표('') 나 큰따옴표("") 안에 값을 입력하면 콘솔에 입력된 값을 출력
-
sep 옵션 : 출력 대상을 연결할 문자열을 지정한다, sep 옵션에 기본값은 띄어쓰기(\t)

print(2021, 7, 28, sep='-')  # 출력 결과: 2021-7-28
print(2021, 7, 28, sep=',')  # 출력 결과: 2021,7,28

- end 옵션 : print문의 디폴트값은 줄바꿈(\n), end=' ' 을 하게 되면 줄바꿈이 안되고 가로로 나열됨!! 

print("hello", end='---->')  # 출력 결과: hello---->
# 만약 줄을 바꾸고 싶지 않다면?
print('hello', end=' ')
print('python', end=' ')  # 출력 결과 : hello python 
end=' '를 사용하면 아무 동작도 하지 않는다.(줄바꿈을 하지 않는다.)

- f-string 옵션 : format()의 상위버전,  f ' '사용하고 ''안에 문자열을 입력하고 format과 마찬가지로 출력하고자 하는 변수 위치에 중괄호({})를 사용하고,  format과 다르게 f-string은 중괄호({}) 안에 출력하고자 하는 변수를 입력합니다.

contact = '010-0000-0000'
address = '서울시 땡땡구 땡땡동'
msg = f'연락처는 {contact}이고, 주소는 {address}입니다.'
print(msg)  # 출력 결과: 연락처는 010-0000-0000이고, 주소는 서울시 땡땡구 땡땡동입니다.

# 혹은

print(f'연락처는 {contact}이고, 주소는 {address}입니다.')  # 출력 결과: 연락처는 010-0000-0000이고, 주소는 서울시 땡땡구 땡땡동입니다.

9. input() 함수 뽀개기!!
: 파이썬은 기본적으로 input()함수를 이용해서 사용자의 입력을 받는다. input은 입력되는 모든 것을 '문자열'로 취급한다.
변수에 값을 입력받을 때에는 a = input() 와 같은 형태로 이용.
- input함수는 숫자를 입력해도 문자열로 입력받기 때문에 숫자를 할당하고 싶다면 함수를 추가적으로 이용해야 한다.
- input 함수를 정수로 바꿔주는 int, 실수로 바꿔주는 float 등의 함수로 감싸주면 된다.

(1) 여러 값 한번에 입력받기(split, map)
- split 함수 : 특정 문자를 기준으로 문자열을 잘라 리스트로 만들어주는 함수
- input 함수로 입력받으면 항상 문자열로 입력되기에, 입력된 문자열에 split함수를 이용할 수 있음.
- map 함수 : map(변환 함수, 반복가능한 객체) 이렇게 두 인수를 받는다. 함수부분에는 원하는 자료형(int, float 등) 넣음.
- map함수는 map타입의 객체를 반환하기 때문에, 이를 다시 list나 tuple등으로 변환을 시켜주어야 한다.
- 하나의 리스트가 아니라, 여러 변수에 대한 값을 한 번에 입력받을 수도 있다. 동시에 여러 변수에 여러 개체를 할당하는 것을 '다중 할당(Multiple Assignment)'이라고 한다. 

a, b, c = map(int, input().split()) # 1 2 3 입력
print(a) # 1
print(b) # 2
print(c) # 3

10. Indexing에 관하여 
- 인덱싱(indexing)어떤 것을 '가리킨다'는 의미.
- 문자열을 이루는 각각의 문자마다 위치를 나타내는 인덱스(index)가 존재한다. 
- 다른 언어들과 마찬가지로 파이썬도 시작 인덱스를 0으로 갖는다. 인덱스에 음수를 쓰게 되면, 문자열을 뒤에서부터 읽게 된다. 
* 여기서 주의해야 할 점은 앞에서부터 읽는 경우에는 0부터 시작하지만, 뒤에서부터 읽는 경우에는 1부터 시작한다.
* -0은 결국 0이기 때문에 이를 구분하기 위함이다. 

S = 'Do python'
print(S[0]) # 'D'
print(S[2]) # ' '
print(S[7]) # 'o'
print(S[-1]) # 'n'
print(S[-2]) # 'o'

11. 슬라이싱에 대하여
- 슬라이싱(slicing)은 어떤 것을 '잘라낸다'는 의미.
- 사용하는 방식은 '변수명[시작지점 : 끝나는지점+1]' 로 이용. 

s = "helloworld"
s1 = s[:5]
s2 = s[5:]
#문자열 반으로 나누기 s1 = hello / s2 = world
#문자열의 특정 문자 바꾸기
a = s[:4] + 'a' + s[5:] # "hellaworld"

12. 문자열 포매팅
- 문자열 포매팅(Formatting)은 문자열 내의 특정한 값을 바꿔야 할 경우가 있을 때 이용하는 방법
1) 서식 지정자로 문자열 포매팅

코드 설명
%s 문자열(String)
%c 문자 1개(Character)
%d 정수(Integer)
%f 부동 소수(floating-point)
%o 8진수
%x 16진수
%% 문자 '%' 자체

- 사용법 : 서식 지정자를 사용하기 위해서는 바꾸고 싶은 위치에 서식 지정자를 넣고, 문자열 뒤에 '% 값'을 추가해준다.
- '%10s', '%2d'와 같이 % 와 문자 사이에 숫자를 넣게 되면 해당 숫자만큼의 길이를 가지면서 빈 공간은 공백으로 두고 오른쪽 정렬을 하여 출력, 수가 음수이면 왼쪽 정렬을 시켜준다는 의미
- 이를 이용하면 값이 달라질 때마다 변수의 값만 계속해서 바꿔주면 되므로 훨씬 편리함.

hour = 12
minute = 25
print("현재 시간은 %d시 %d분입니다." %(hour, minute))
name = "철수"
height = 180
weight = 80
print("%s의 키는 %d이고, 몸무게는 %d입니다." %(name, height, weight))
print('숫자 출력%10d.' %100)
# ans : 숫자 출력       100.
print('숫자 출력%10d.' %10000)
# ans : 숫자 출력     10000.
print('숫자 출력%-10d.' %10000)
# ans : 숫자 출력10000     .
print('문자열 출력%10s.'%'string')
# ans : 문자열 출력    string.

13. 리스트(list) & 튜플(tuple) & 딕셔너리(dictionary) 

1) 리스트(Iist) : 리스트 생성 및 연산자
- 파이썬에서 리스트를 생성하는 방법은 대괄호 '[ ]' 로 감싸주고, 리스트의 원소들은 쉼표 ','로 구분해준다.
- 리스트는 아무 원소를 포함하지 않는 빈 리스트일 수도 있고, 숫자를 원소로 가질 수도 있고 문자열을 원소로 가질 수도 있다. 즉, 어떠한 자료형도 원소로 가능하다.
- 리스트에서도 덧셈 연산자 +와 곱셈 연산자 *를 사용할 수 있다.
두 리스트를 더하는 것은 두 리스트를 합치는 기능을 하고, 리스트에 숫자를 곱하게 되면 리스트가 해당 숫자만큼 반복되어 새로운 리스트를 생성한다

2. 리스트의 인덱싱과 슬라이싱
- 리스트도 문자열과 동일한 방식으로 인덱싱과 슬라이싱이 가능하다. 
- 마찬가지로 인덱스의 시작은 0이며, 음수인 경우에는 뒤에서 몇 번째인지를 나타낸다. 
- 리스트는 문자열이나 리스트를 자신의 원소로 가질 수 있기 때문에 해당 원소 내의 원소도 접근이 가능

a = [1, 2, [3, 4, 5], 'python']
print(a[3][2])  # ans : 't' , [3] 번 배열안에서 2번째를 추출
print(a[:2]) # ans : [1, 2]
print(a[2:]) # ans : [[3, 4, 5], 'python']
print(a[2][1:]) # ans : [4, 5]
print(a[3][:3]) # ans : 'pyt'
 len 리스트의 원소 개수를 반환 len(a) 4
 sort 리스트의 원소를 오름차순으로 정렬

sort(reverse=True) : 내림차순
a.sort() 

a.sort(reverse=True)
a = [1, 2, 3, 4]

a = [4, 3, 2, 1]

2) 튜플(Tuple)
- 튜플은 리스트와 비슷하지만 immutable하다는 큰 차이점.
- 튜플은 한번 생성하면 변경할 수 없기 때문에, 보통 항상 일정한 값을 가지기를 원하는 경우에 사용한다. 
- 더불어 리스트에서 사용하는 많은 함수들을 당연히 튜플에서는 사용하지 못한다. min/max, len, sum등 원소를 조작하지 않는 함수들만 이용할 수 있다.
- 튜플을 생성하는 방법은 리스트에서 대괄호 '[ ]'를 이용했다면 튜플은 소괄호 '( )'를 이용한다.
- 원소가 1개인 경우에는 원소 뒤에 쉼표 ','를 넣어주어야 하고, 괄호를 쓰지 않고 a = 1, 2, 3 이런 식으로 선언하면 자동으로 튜플로 지정되는 특징을 가지고 있다.

3) 딕셔너리(Dictionary)
- 먼저 딕셔너리(Dictionary)란 각각의 키(key) 값마다 하나의 값이 대응된 쌍들을 모아놓은 자료형
- 의미 그대로 사전에서 어떤 단어의 뜻을 찾기 위해서 해당 단어만 찾으면 되듯이, 특정 값을 찾기 위해서는 대응된 key값으로 바로 찾을 수 있다는 장점
- 리스트는 대괄호, 튜플은 소괄호를 이용했다면 딕셔너리는 중괄호 '{ }' 를 이용해서 생성.
* 리스트 [ ], 딕셔너리 { }, 튜플 ( )  

- 딕셔너리의 기본적인 형태 : {key1: value1, key2: value2, key3: value3 ...}
- 이처럼 key값과 value값을 콜론(:)으로 묶어서 저장하고 쉼표로 구분 짓는다.
- 빈 딕셔너리는 a = {} 혹은 a = dict()로 생성한다. 
- 딕셔너리의 key값에는 immutable한 자료형들만 사용 가능하고, value값은 모든 자료형을 사용할 수 있다.즉, key에는 리스트, 딕셔너리를 사용할 수 없다.

(1) 딕셔너리 사용하기
- 딕셔너리의 키에 접근하기 위해서는 a[key]와 같이 사용해주면 된다. 리스트에서 인덱스를 넣어주는 것과 비슷하다.
- a[key]는 대응되는 value를 의미하게 된다. 만약 key가 딕셔너리에 존재하지 않는다면 에러가 발생한다. 
- value를 얻기 위해서 get이라는 함수를 이용할 수도 있다. a.get(key)와 같은 방식으로 사용하며, get 함수를 이용할 땐 key가 존재하지 않는 경우 에러가 아닌 None을 반환한다.
- key가 없을 때 None이 아니라 지정한 값을 반환하고 싶다면 get(key, '값')의 형태로 사용하

(2) Key, value 들로 객체 만들기
- key와 value의 쌍으로 이루어진 딕셔너리에서 Key들만, 또는 value들만 따로 뽑아낼 수 있다. keys()와 values() 함수를 이용하면 key 또는 value들만을 모아서 객체를 반환한다. 
- items 함수를 이용하면 key와 value 쌍 각각을 튜플로 묶은 객체를 반환한다.  리스트로 이용하고 싶다면 list함수를 이용해서 객체를 리스트로 바꿔줄 수 있다. 

(3) key, value 쌍 모두 지우기
- 리스트나 튜플과 마찬가지로 clear() 함수를 이용하면 빈 딕셔너리가 된다. a.clear()로 사용한다. 

(4) 딕셔너리의 key 개수 구하기
- key 개수는 딕셔너리의 원소의 개수와 동일하며 이는 결국 딕셔너리의 길이와 동일하다. len 함수를 이용해서 len(a)와 같이 이용해주면 key의 개수를 구할 수 있음.

(5) 딕셔너리에 key가 있는지 확인하기
- 딕셔너리에 key가 있는지 없는지 확인하고 싶다면 in 또는 not in 연산자를 사용하면 된다. 
- 반환 값으로는 True 또는 False, 즉 boolean 값을 가진다.

14. 조건문(if) & 반복문(for) 

1) if문 : if문은 입력한 조건을 만족하는 경우에만 다음 문장을 수행하는 구문
- if [조건] : (수행할 코드)
조건을 만족할 때 수행할 코드는 if문 다음에 들여 쓰기(공백 4칸)으로 구분된다. 만약 들여 쓰기가 올바르게 되어있지 않다면 에러가 발생함. 파이썬은 인덴트(tab)이 매우 중요함!! 

2) elif - else문
elif는 else if를 줄인 말로, 2개 이상의 조건을 넣고 싶을 때 이용한다. 위에서부터 차례대로 조건을 확인하면서 제일 먼저 만족하는 조건에 포함되어 있는 코드를 수행하고 조건문을 빠져나온다. else는 작성한 조건들을 모두 만족하지 않는 경우에 else문 내의 코드를 수행함.

a = 10
b = 20
if a > b:
    print('a is greater than b')
elif a == b:
    print('a is equal to b')
elif a < b:
    print('a is less than b')
else:
    print("error")

3) 반복 for문
for [변수] in [반복가능한 객체]:
   
[수행할 코드]

4)  for와 range 함께 사용하기
-
range함수는 연속된 숫자들을 담고 있는 객체를 반환한다. 
- range(시작, 끝)으로 함수를 이용하며, [시작, 끝)의 범위에 포함되는 모든 정수들을 담게 된다. '시작' 값을 적지 않아도 된다. 그 경우에는 0부터 시작하도록 자동으로 설정해준다. 그리고 구간 내의 모든 정수를 담지 않고 특정 간격만큼 건너뛰어서 담을 수도 있다.  그런 경우에는 range(시작, 끝, 증가폭)으로 이용하면 된다. 
- range() 함수는 range(시작 위치, 끝 위치+1, 증가폭)의 구조를 생각하면 쉬움!!

for i in range(2, 5): # 3번 반복
    print("반복문")

# 반복문
# 반복문
# 반복문 

sum = 0
for i in range(1, 11):
    sum += i
print(sum) # ans : 55

5) 리스트 내포(List comprehension) 사용하기

a = [1, 2, 3]
b = []
for i in a:
    b.append(i*2)
print(b) # [2, 4, 6]

 


으앜앜앜 오늘 나머지 공부중입니다^^
오늘은 여기까지입니다!! 
과연 파이썬 마의 구간을 뚫을 수 있을지... 저의 행보를 지켜봐주세요 ㅎㅎㅎㅎㅎㅎ

전혀 이해하지 못했다고 한다.

반응형