낼름낼름 동동이

[ASAC2일차] 파이썬 기본기 쌓기 본문

데이터분석/파이썬

[ASAC2일차] 파이썬 기본기 쌓기

인죠인간 2024. 3. 22. 09:03

3월 22일의 생존 일지


매니저님이 강의를 시작하기에 앞서서 기본적으로 어떤 방향으로 수업을 듣고 생각을 하는게 좋은지 이야기를 해주셨다. 첫날 OT를 할 때도 이전 기수들의 꿀팁이 있었는데, 대부분 비슷한 내용인 것 같다. 어찌되었건 그냥 수동적으로 강의만 듣고 있지말고 적극적으로 자기가 얻어갈 것을 확실하게 챙기는게 중요하다는 것 같다.

이번 python 과정은 Google Colab으로 진행한다고 한다.

나는 VScode에서 Jupyter notebook을 주로 이용해서 만들었는데, Colab으로 한번 해보면서 어떻게 다른지 직접 체험해봐야겠다.

Colab은 구글에서 클라우드 기반으로 미리 환경 구축을 해두었기 때문에 별도로 설치할 필요가 없어 편하다.

다만, 파이썬이 최신 버전이 아니므로 이는 감수해야하는 부분이다. 또한, Colab에서 자동 업데이트를 하게 되면 전부 업데이트 되므로 코드가 중간에 동작하지 않을 수도 있다고 하니 이점을 유의해야겠다.

 

1.  환경 구축


기본 설치 방법

IDE(개발통합환경)

  • 파이썬 전용툴 (pycharm)
    • 파이썬만을 위한 IDE
  • 범용툴(VScode)
    • 파이썬을 포함한 많은 언어를 다양하게 활용 가능
  • 대화형툴(jupyter, colab, ipython)
    • 분석, 학습 등 데이터 사이언스에 최적화 되어 있다.
    • 셀 단위로 실행과 결과 확인이 가능하므로 미리 데이터셋을 저장해두고 한 줄씩 작성하며 확인하기 좋다.
    • 인터프린터 언어의 스타일은 한줄씩 실행한다. 이와는 달리 C, java등은 컴파일 과정을 거쳐 실행하게 된다.

2.  파이썬의 기본 Brief


파이썬의 특징

  1. 스크립트 언어
    • 이게 무슨뜻일까? 궁금해서 찾아봤는데, 인간이 일반적으로 수행하는 작업을 자동화하는 프로그래밍 언어를 의미한다고 한다. 가볍게 생각해서 자동화된 것들을 활용하여 조금 더 쉽게 할 수 있다는 것을 생각하면 편할 것 같다.
  2. 파이썬의 기준 숫자는 0
  3. 들여쓰기를 기준으로 단락이 구분되어 가독성이 좋다.
  4. For 반복문
    • 일반적으로는 시작부터 끝, 증분으로 돌린다는 개념이지만, 파이썬에서는 여러 데이터 타입의 개별 원소를 Rolling 해주는 개념
  5. 모든 것들은 객체(Everything is Object)

파이썬의 변수 네이밍 방식 PEP8 : (Python Enhancement Proposal #8)

  • 첫 문자는 문자, _ (언더스코어)이어야 한다.
  • 파이썬의 코드를 어떤 형식으로 작성할지 알려주는 스타일 가이드
  • 파이썬의 기본 예약어 (for, if, else 등)은 피해야 한다.
  • 변수의 시작을 대문자로 하는 경우 클래스 이름을 의미

 

3. 파이썬 Essential


  • 변수 : 값을 가리키기 위한 공간
  • 제어문/반복문 : 상황에 따른 제어나 단순 반복을 코드로 구현하기 때문에 가장 중심이 된다. 이 부분이 자유로워야 원하는 데이터의 핸들링이 가능하다.
  • 함수 / 클래스 : 좀 더 구조적으로 기능 중심으로 단순 반복을 처리하기 위해서 일반적인 ML/DL의 기본은 함수 정도까지만 알아도 충분하지만, 최신의 DL등을 하기 위해서는 클래스까지 알아야 한다.

3-1. 변수

  • 변수란 말 그대로, 어떠한 값을 대표하는 이름
  • 파이썬의 변수의 특징
    • 대소문자는 구분된다 (a 와 A가 다르다)
    • 파이썬이 미리 사용중인 (if, for, etc) 등은 변수명으로 사용할 수 없다.
    • 엄격한 C/Java와는 다르게 할당하고자 하는 값의 형식을 처음부터 지정하지 않는다. (a = 10 으로 바로 저장함) c는 int a = 10 이렇게 한다면 파이썬은 a = 10
    • 위치는 반드시 왼쪽에서 사용해야 한다.
  • 변수명 = 값 (숫자, 문자 , 여러 개 , 객체 등등)
    • 항상 왼쪽에서 문자로 선언하며
    • 대입 연산자를 통해 오른쪽에 값을 할당한다.
    • 오른쪽 값을 통해 변수는 파이썬에서 지정한 자료형이 되고 그것들을 주어진 상황에 잘 맞게 사용하면 된다.

파이썬에서는 변수에 값을 할당하는 과정에서 연산자를 같이 사용할 수 있다.
n = n + 1 로 할 수 있지만, 나중에는 속도 동의 이슈로 위 사진과 같이 n += 1 로 작성하는 것을 추천한다.

파이썬에서는 멀티 할당이 가능한데, 이를 통해 일반적으로 다른 언어에 비해 매우 짧게 코드를 작성할 수 있게 된다.

3-2. 자료형


 

 

단일 데이터(1개의 값)

  • 수치형(정수, 소수 등 int, float)
  • Boolean(논리 값)
  • 문자("a", "b") (단, "hello" 같은 문자열이 아닌 1개의 문자임을 생각해야 한다)

연속 데이터(여러 개의 값)

  • List(리스트)
    • [값, 값, 값 ,,,,]
    • 추가 / 제거 가능
    • 순서가 존재한다(즉, 인덱스가 있다)
  • Tuple(튜플)
    • (값, 값, 값 ,,,)
    • 1번 생성하면 변경이 안된다.
    • (1,2,3), (3,)
  • Set(집합)
    • {값, 값, 값 ,,,}
    • 수학적인 집합 -> 유니크한 원소만
  • Dict(딕셔너리)
    • {키1 : 값1, 키2 : 값2}
    • 순서는 없다. 데이터는 키와 값의 세트로 관리된다.
    • 키 값을 통해 값으로 접근성이 빠르다.
  • 문자열
  • 배열(ndarray)
    • numpy의 기본 자료구조
  • 시리즈(Series)
    • 1차원 데이터
    • pandas의 자료구조
  • 데이터프레임(DataFrame)
    • 2차원 데이터
    • pandas의 자료구조
  • 텐서(Tensor)
    • 딥러닝 엔진 / framework

List

  • 파이썬에서 여러 개의 값을 다루는 대표 자료형이다.
  • 대표 기능
    • 추가
      • append (뒤로 오는대로 추가)
      • insert (중간 꼽사리 새치기 -> 어디에, 누구를 추가?)
    • 제거
      • pop(어디 위치를 제거?) -> 특정 위치만 지우므로 중복값 제거랑은 상관이 없다.
      • remove(어떤 값을 제거?) -> 중복 값이 있을 수 있지만 가장 먼저 발견한 맨 처음 값만 지운다.
  • 외에 대표적 자료 구조인 stack, queue에서도 자주 활용
  • 리스트 같은 경우 Mutable한 객체로서 메서드를 활용하면 메모리상 바로 반영하게 되어서, 재할당이 필요 X
  • pandas의 경우에는 원하는 데이터변형이 아니면 방대한 데이터를 다시 불러오고 하므로, 기본은 원본에 바로적용이 아니고 inplace 같은 옵션으로 이렇게 변형하는게 맞다면 그때서야 실제 메모리에 적용시켜준다.

append(가장 뒤에 추가된다)
remove(x) 가장 먼저 나온 x값 1개 제거
리스트의 인덱스로 값에 접근하는 방식


참고) 썡파이썬의 리스트는 안되는 것

[]인덱스 안에 여러개 리스트로 넣으면 안될까? 안됨 X numpy의 array는 가능하다.

예시 ) a_list [[1,3,4]] -> 파이썬 리스트형에서는 불가능

문자열

  • 1개의 문자값을 다루는 것을 "문자", 여러 개의 문자들을 합친 것을 "문자열" 이라고 함 -> 물론 파이썬에서도 엄밀하게는 다른 자료형이지만 거의 동일하다고 생각하면 된다.
  • 리스트처럼 개별 문자들을 모아둔 것들 문자열이라고 생각

파이썬의 문자열 작성 방식

파이썬에서는 자료형에 따른 연산자 동작이 달라짐
문자형을 강제 형변환으로 계산할 수 있다.

 

Tuple

  • 여러 개의 값을 다루는 리스트와 거의 동일
  • 그러나 값을 한 번 만들면 변경을 하지 못한다.
  • 즉, append, remove 같은 것들이 불가능하다.

튜플의 사용방식

Dict

  • 리스트/튜플과 같이 값들을 여러 개 모아둔 것은 동일
  • 리스트와 튜플은 몇 번째 숫자 이외에는 값에 접근하는 방법이 없었으나, Dict은 효율적으로 접근이 되는 key : value를 활용하여 직접 값에 접근할 수 있다.
  • 자료 구조상 hash table을 적용되므로 상당히 빠른 속도를 가지게 된다.

딕셔너리의 기본 선언 및 조회방식

Set

  • 집합의 형태
  • 중복값이 아닌 유니크한 값만 저장
  • 중복된 것을 없애거나, 처리하기 귀찮을 때 set으로 자료형을 변경하면 매우 쉽게 처리가 가능!!
  • 순서가 없고 정수 인덱스 사용은 불가능

3-3. 연산자


산술연산자

  • +, -, * , /, <, >, == , 등등
  • 나눗셈은 몫과 나머지를 계산하는 연산자가 따로 존재한다.
  • 파이썬은 데이터 타입을 선언 X, 서로 다른 데이터 타입끼리 연산을 할 때는 변환을 하는 등 주의해야 함.
  • 파이썬에는 몫과 나머지를 한 번에 제공하는 divmode 라는 함수가 있다. 출력은 몫, 나머지 순서로 튜플 형태로 반환

나눗셈 관련 산술 연산자

  • / : 단순 소수점으로 나눈 결과를 출력
    • 단, 유효 숫자에서 차이 및 오차가 발생할 수 있다. 이 문제가 중요해지는 경우 numpy 보다 유효숫자가 긴 다른 자료형을 사용해야한다는 점 주의
  • // : 단순히 몫만 하기 위해서 계산 
    • 크롤링 or 일정한 데이터의 수만큼 처리하는 과정에서 간단히 연산자로 몇번이나 처리해야 하는지 계산
    • 참고)
  • % : 나머지를 확인하고 활용하기 위해 사용

비교 연산자, 논리연산자

  • 비교 연산자
    • ==
      • 같냐? --> 결과는 T/F 로 존재
      • 여기 True 의미 : 응 2개가 같아!
    • !=
      • 다르냐? --> 결과는 T/F로 존재
      • 여기 True의 의미 : 응 2개가 달라!
    • >, <, <=, >=
      • 부등식 기반의 비교 연산자
  • 논리 연산자
    • 여러 조건에 대해 and, or, not 등
    • 논리곱(a and b)
      • 양쪽 모두 참일 때 참
    • 논리합 : a or b
      • 양쪽 중 1개만 참이면 참
    • 논리부정(not x)
      • 참과 거짓을 뒤집음
    • 참고
      • 파이썬에서 논리 연산자는 and, or, not이며 다른 언어에서 사용하는 &, | , !는 bitwise 연산자이므로 주의해야한다.

' is ' VS ' == '

  • is 연산자
    • 객체의 주소값이 같으면 True
    • 참조 비교
  • == 연산자
    • 객체의 값이 같으면 True
    • 값 비교

'and, or, not' vs '&, |, !'

  • and 연산자
    • 논리 연산자
    • 1번 인자가 True이면 2번 값을 반환
    • 1번 인자가 False이면 False
  • & 연산자
    • 비교 연산자
    • bitwise 비트별로 and 연산을 한다.

**** Short-Circuit VS Eager

  • Short-Circuit : 처음 조건에 의해 2번째 조건이 의미없을 때
  • Eager : 처음 조건과 상관없이 2번째 조건에 의해 실행 된다.

 

3-4. 조건문


if문

  • if는 기본적으로 분할의 개념이다.
  • 즉, 겹치지 않게 전체를 나눠야 한다.
  • 조건이 명확하게 분할하여 여러 조건에 포함되게 만들어서는 안된다.

조건문의 예시

 

참고)
이때, if만 쓰는 조건, elif를 함께 쓰는 것은 결과에서 다르게 작동할 수 있다.

그 이유는 elif는 이전에 조건에서 통과되었으면 이후 조건을 또 검사하지 않지만

if를 반복하는 것은 독립적으로 조건을 검사하게 되기 때문에 다른 동작이 일어나게 된다.

(if,elif 같이 쓰기) vs (if만 쓰기)

 

또한, else에서 특별히 무언가 동작하지 않게 할 때는
비워두지 말고 pass를 사용해야한다. (비워두면 에러가 생김)

pass를 빼먹지말자..!

3-5. 반복문


기본적인 여러 작업들에 대한 반복적인 부분을 바탕으로 규칙을 만들게 된다.

수많은 코드를 작성하며 반복할 필요가 없도록 n번째 값이 무엇인지 찾기 위한 일반항(규칙)을 찾는 것이 가장 중요하다.

 

for: 정확히 n번 반복

while: 정해둔 조건을 만족할 때까지 반복

Recursion: 자기 자신을 호출하는 형태

For

  • 돌릴 수 있는 대상(iterator)들을 하나씩 롤링을 해주는 것이 파이썬 for문의 핵심이다.
  • 그래서 돌리려는 것만 딱 정확하게 돌게되는 점이 while과의 차이다.
    • 돌리는 것들에 대한 리스트업 == 필요한 것들을 직접 리스트업을 해서 돌리면 된다.

정말 기본적인 반복의 형태
리스트를 미리 정해두고 이를 가지고 반복시키는 형태
i의 시작이 1이므로 10과 11로 했을 때 끝이 다르다!

 

리스트의 다양한 반복 방식
딕셔너리 자료형을 반복하는 경우
딕셔너리의 key, value를 따로 호출하는 방법

 

 

+) 예약어를 함수로 써서 생긴 에러

가벼운 예제를 풀고 있었는데, 정답과 동일하게 코드를 처리했음에도 문제가 생기는 것을 확인할 수 있었다..

혼자서 왜 안되지 생각해보다 도저히 알기 어려워서 검색을 해보니 바로 문제를 해결할 수 있었다.

 

 

예약어는 함수로 쓰지 않도록 조심..

 

이전에 내가 예약어를 사용하여 변수를 했었고 이로 인해서 sum 함수가 정상적으로 동작하지 않아 생기는 문제였던 것이다.

이러한 경우 기존에 정의한 sum을 삭제해주면 정상적으로 문제가 해결되는 것을 확인할 수 있었다.

삭제해주면 문제 없다!

 

 

 

4. 마무리


강의를 들으면서 옵시디언이라는 문서 정리툴을 이용해서 정리를 하다보니, 블로그에 옮겨 담을 때 마크다운을 인식하지 못해 글의 가독성이 더욱 떨어지게 되는 것 같다.. 불편해.... 좋은 방법이 없을까? 우선은 마크다운 모드로 변경해서 옮기지 말고 우선 로우하게 글을 옮겨두고 이후에 복습하면서 시간을 조금만 들여서 정리해야지...

 

오늘은 파이썬의 이론 수업이 주라서 내용이 길었던 것 같은데, 이후에는 실습 내용과 내가 느낀점, 에러처리 과정에 대해서 더욱 많이 담을 수 있도록 해봐야겠다.