본문 바로가기
공부zip./데이터사이언스

[패스트캠퍼스 국비지원교육 개발노트] 데이터분석 인강_week 2.1

by 혜이블 2022. 2. 25.

2주 차 강의.

오늘도 열심히 필기 중

2주 차 강의는 양이 꽤 많았다.. 이렇게 차이나도 돼..?
처음이라 꼼꼼하게 봐서 그런지 오래 걸렸던 것 같다.
이제 본격적으로 파이썬 프로그래밍을 시작!

2주 차가 Python(1, 2, 3, 4)로 나뉘어 있는데, 양이 너무 많아서
두 번 나눠서 올릴 예정이다.

2주차 강의 내용 및 시간


오늘의 개발 노트.

목차. 

더보기
  1. Computer Architecture & Programming
    • Programming이란
    • Computer Architecture
    • 왜 파이썬일까
  2. Python Data Types
    • Data Type이란
    • 변수(Variable)란
    • 숫자 데이터(Numberical Data Types)란
      • 정수형(Integer)
      • 실수형(Floating Point)
      • 산칙연산
      • 특수연산
      • 문자열(String)이란
      • 연속형 데이터(Sequential Data Types)란
        • 리스트(List)
        • 슬라이싱(Slicing)
      • 튜플(Tuple)이란
      • 집합(Set)이란
      • 사전(Dictionary)이란

1. Computer Architecture & Programming 

  • Programming이란 : 
    = 컴퓨터에게  일/명령을 내리는 과정/방법이며 결과로 하나의 과정을 수행하는 '프로그램'이 생성된다.
    • 2 가지 구성 요소 필요 : 1) 프로그램을 하수행 하는 컴퓨터와 2) 명령을 구성하는 코드
    • 컴퓨터와 소통하는 것 = 코드를 통해 프로그래'밍'을 함
  • Computer Architecture : 
    - CPU = 컴퓨터에 일어나는 모든 계산을 처리하는 애
    - RAM = 중간에서 데이터를 가지고 CPU와 일하는 애
    - SSD = 모든 데이터를 저장하고 있는 애 (장점: 데이터를 많이 갖고 있을 수 있음)
    # RAM이 있는 이유: CPU-빠르지만 용량 작음-가 100만 번 일할 때 SSD-느리지만 용량 큼-는 한 번 일함. 즉, CPU가 답답할 수밖에... > 그 중간인 DRAM 필요. 
  • 왜 파이썬일까? 
    = 전 세계적으로 가장 많이 사용하는 프로그래밍 언어 중 하나.
    # Zen of Python(PEP 20) 파이썬의 기본적인 철학이 담겨있음
        ㄴ '파이썬은 기본적으로 예쁘고 깔끔해야 한다'가 디폴트 (=가독성이 좋아야 한다.)
    • 메인 특징 :
      1) 생산성 : 개발 속도가 빠름
      2) 가독성 : 코드가 예쁘고 보기 편함
      3) 확장성 : 오픈소스 라이브러리
                      ㄴ 쉽게 사용할 수 있는 소스들이 많이 공개되어 있기 때문에 빠르게 발전할 수 있었다고 함.
    • 파이썬 프로그래밍 언어 - 비교적 특징들 :
      - interpreter 언어 = 한 줄씩 실행함, 코드를 부분 부분 진행 가능
      - 동적인 데이터 타입 지원 = 데이터를 보며 '이건 숫자, 저건 문자' > 자동으로 지정함
      - 간단하고 쉬운 문법 (상대적으로)
      - 높은 확장성 (=오픈소스 라이브러리)
      - 다양한 데이터 타입
      - 메모리 자동 관리
      # 오픈소스 라이브러리가 아니더라도 다른 사람이 만들어 놓은 코드도 공개가 많이 되어 있음 @github
    • 파이썬에서 프로그래밍을 할 때 지켜야 되는 규칙 :
      1) 띄어쓰기, 들여 쓰기(tab) 꼭 지키기!
      2) 변수의 type(문자/숫자 등)를 따로 지정하지 않아도 됨!
      3) line by line으로 차례대로 실행됨!

2. Python Data Types

  • Data Type이란 :
    = 모든 프로그래밍 언어가 데이터를 다루기 위해 필요한 약속.
    • 프로그래밍 언어마다 조금씩 다르며, 시작할 때 제일 먼저 익혀야 하는 필수 관문.
    • 프로그래밍 언어에서는 변수에서 데이터를 저장/관리함.
      ㄴ '변수'라는 개념을 통해 데이터를 사용할 수 있다.
    • 중요한 포인트는 : 어떤 연산을 사용할 수 있는지 + 연산 결과가 어떤 의미인지를 알아야 함.

정말 다양한 데이터 타입.. 두근두근

  • 변수(Variable)란 :
    = 메모리에 데이터를 저장하기 위한 공간 + 컴퓨터와 프로그래밍 언어 사용자 간의 약속
    • nickname 느낌
    • 실제 물리적인 메모리 주소 공간을 가리킴
         ㄴ 사용자 : 변수의 이름으로 데이터 인식
         ㄴ 컴퓨터 : 변수의 주소로 데이터 인식
  • 숫자 데이터(Numberical Data Types)란 :
    = 정수/실수/복소수/2진수/8진수/16진수를 포함하며 가장 많이 사용하는 데이터 타입 중 하나.
    • 파이썬 숫자 표현 범위 : 무한대
    • 숫자 데이터는 우리가 알고 있는 대부분의 연산을 그대로 지원함 (사칙연산, 나머지 구하기, 몫 구하기 등)

     > 정수형(Integer) : 

할당하다 = assign

     > 실수형(Floating Point) : 

E# = 10의 #승


   - 숫자형 데이터 타입이 제공하는 여러 연산자 : 

     > 사칙연산 : 

print( )를 사용한 산칙연산

     > 특수 연산 : 

# 뒤에 내용 확인하기

              print(c ** d) : c를 d번 곱하다
              print(c // d) : c를 d로 나눈
              print(c % d) : c를 d로 나눈 나머지

              == : 같다
              != : 다르다
              N % 4 == 0 : 4의 배수(=N을 4로 나눈 나머지가 0일 때)


     > 문자열(String)이란 : 
        = character sequence(문자의 나열) e.g. "Hello world"

       ㅇ 문자열을 만드는 여러 가지 방법 :

    • 특징 : 
      • 파이썬에서 다룰 수 있는 문자열의 크기 : 무제한
      • ' ', " " -> 두 가지의 기호를 통해 문자열 나타냄
      • 현재 전 세계적으로 웹에서 사용되는 국제 표준 : UTF-8
      • 컴퓨터 문자를 encoding 하여 숫자로 표현함 e.g. ASCII, cp949...
        ㄴ 컴퓨터는 문자 > 숫자로 인식함

      1. 원래 한 줄에 써야 하지만, 나는 꼭 엔터를 치고 싶다! :

""" 앞뒤에 필수!
""" 없이 그냥 쓰던대로 + 엔터를 치면 인식 못함

      2. 특수 문자 표현(escape code) :
          \n (원래 '/' 반대 모양) = new line
          \t = tab

      3. 문자열 계산하기 : 

          (1) 가운데에 빈칸 넣기 :

1-1 진짜 빈 칸을 더해주기
1-2 애초에 첫 단어에 space를 넣기

          (2) 반복해서 출력하기 :

          (3) 문자열 길이 출력하기 : 함수 len( )

 

      4. 문자열 Formatting : [스스로 생각해내서 만들기엔 연습 필요..]
          = 문자열 출력할 때(print 함수 이용) 특정 format을 지정하고 싶은 경우 :
               1) print format = print("%s는 %d개 있다." % (A, B))
                     [ %s = A / %d = B ]
               2) str.format = print("{ }는 { }개 있다." .format(A, B))
               3) f-string = print(f"{A}는 {B}개 있다.")

예시

      5. 문자열 관련 함수들 :

          1) 대소문자 = s.upper( ), s.lower( )

          2) 문자 공백 지우기 = s.strip( )
               - 맨 왼, 오른쪽 공백만 없어짐

중간 공백은 안 없어진다.

          3) 문자열 삽입 = "무언가". join("abcd")
               - 무언가를 "abcd" 사이에 각각 삽입

          4) 문자열 나누기 = s.split( )

(공백)을 중심으로 나눔
("is")를 중심으로 나눔

          5) 문자열 바꾸기 = s.replace("A", "B") -> s의 A를 B로 바꿔라


     > 연속형 데이터(Sequential Data Types)란 : 
        = 하나의 변수에 여러 개의 데이터를 넣을 수 있음
        = List, Tuple, String이 해당됨
        ㄴ 각 연속형 데이터 타입마다 특징이 다름
             - 그 특징을 파악하여 용도에 맞는 데이터 타입 사용하는 것이 중요하다
             - 구분해야 할 부분 (동일한 연산/operation 사용 ㅇ) : indexing & slicing
             - 이 두 가지가 되면 연속형 데이터 타입이 됨.

      1. 리스트(List) :
          = 가장 많이 사용되는 연속형 데이터 타입!
               - 굉장히 유연한 구조를 가지고 있어 데이터를 편하게 다룰 수 있음
               - 파이썬에서 [ , ]를 이용하여 표현함 -> [1, 2, 3]
               - 리스트의 원소 : 쉼표로 구분, 아무 데이터 타입 가능, 리스트조차 가능!
               - 수정이 자유로움 (수정을 하면 안 되는 경우에는 사용 x)

      1.1 리스트 만드는 방법 :
          # type(변수) -> 실행하면 변수가 어떤 데이터 타입인지 알려줌

리스트 of 원소 [1, 2, 3]
빈 리스트 만드는 2 가지 방법
다양한 원소를 담은 리스트
행렬 표현은 이렇게! (2차원 리스트, 2개의 리스트를 원소로 갖고 있는 리스트!)

      1.2 인덱싱(Indexing)
          = '어디'에 있는 '어떤 데이터'를 찾겠다.
               - 연속형 데이터들은 one 변수에 여러 가지 데이터를 가지기 때문에, 여러 데이터를 접근하는 방법이 필요
               - 리스트의 index는 맨 앞부터 0으로 시작해, 1씩 증가하는 정수 index 사용 (#index 0!)
                    e.g. [1, 2, 3] 일 때, 원소 [1: 0, 2: 1, 3: 2] 
               - 음수 index도 제공 -> 맨 뒤에서부터 왼쪽으로는 -1, -2... (0은 -0이 없기 때문에 -1에서 시작)
               - index 사용 법 : 
                    e.g. L = [1, 2, 3] 일 때, L[0] = 1, L[-1] = 3

음수 index

      1.3 인덱싱 그냥 외우는 것보다는 이렇게 이해하자! :

L의 마지막 원소는 전체 개수 -1. [len( )은 L의 전체 원소 개수]
'L2의 두번째 원소의 첫번째 원소'라는 뜻


      1.4 슬라이싱(Slicing) : 
          = 리스트의 일부만 잘라내서 사용하고 싶을 때 쓰는 기법 (인덱싱을 범위로 하는 느낌)
               - 리스트의 index & : 을 사용하여 슬라이싱

L [ 원소 #부터 : 인덱스 #까지 ] 자르기
L [ : # ] or L [ # : ] (각 끝에 숫자를 안쓰면 자동으로 리스트의 길이가 됨(맨 끝)
문자열도 indexing, slicing 똑같이 적용 가능!

      1.5 리스트 연산하기 :

# 수정하기 = 바뀐게 적용 됨 (수정하면 원래대로 다시 못 돌림 - 조심)

       1.6 리스트 관련 함수

          - L.append( ) = 리스트에 원소 추가하기 

L.append( )

          - L.sort( ) = 리스트 원소 오름차순 정렬
            L.sort(reverse=True) = 내림차순 정렬

L.sort( )
L.sort(reverse=True)

          - L.reverse( ) = 리스트 뒤집기 (정렬 X) 
              ㄴ slicing으로 가능한 또 다른 방법 = L[ : : -1 ] = 처음부터 끝 범위에서 뒤에서 앞으로 출력

L.reverse( )
slicing = L[::-1]

          - L.pop( ) = 리스트에서 가장 늦게 들어온 원소 한 개 제거하기
             ㄴ 원하는 원소를 (순서와 상관없이) 제거하고 싶을 때는 : L.remove( ) 사용하기!

L.pop( )


     > 튜플(Tuple)이란 : 
        = 리스트와 비슷
             - indexing, slicing 동일하게 사용 가능
             - 원소들도 자유롭게 사용 가능

리스트 vs 튜플 차이점 2가지 : 

  사용하는 괄호 생성 후 수정 가능성 Data Type
리스트 [ ] O (Mutable) Mutable:
List, Dict, Set
튜플 ( ) X (Immutable) Immutable:
Int, Float, String, Tuple, Frozenset

          ㄴ Immutable Data Type이 필요할 때가 있음 : 
               1) 성능적인 이슈      -> 데이터가 변경되지 않아서 그 자체로 장점
               2) 프로그래밍적인 이슈      -> 데이터 수정 자체를 x, 실수 방지

튜플은 수정 불가능(immutable)임을 알 수 있음!


     > 집합(Set)이란 : 
        = 수학 집합과 (=)
             - 수학: { } 사용 / 파이썬도 { } 사용하지만, 그냥은 x
             - 사전(dict) 자료형도 { } 사용하기 때문

               ㅇ 공집합 : set( ) -> { }이걸 쓰면 빈 사전이 생성된다.
               ㅇ 집합의 연산자 : 교집합, 합집합, 차집합 모두 지원
               ㅇ 특징(리스트와 차이점) :
                    1) 집합은 원소의 중복이 X (원소의 종류를 나타내기에 좋음)
                    2) 집합은 원소의 순서가 X (원소의 index가 X)

index가 없다! 다른 방법으로 찾아야 함

           ㅇ 집합의 연산 : 
               1) 교집합 = s1 & s2
               2) 합집합 = s1 | s2      or       s1.union(s2)
               3) 차집합 = s1 - s2      or       s2 - s1 
                    ㄴ 순서에 따라 구하는 값이 다름

(0) 집합 만들기
(1) 교집합
(2) 합집합
(3) 차집합

      > 집합의 원소의 uniqueness를 활용하는 경우 : 

set(L) : 중복 제거 됨 (전체 개수 구하면 중복 제거 된 후의 개수 알려줌)

      > 집합 관련 함수 :
          s.add( ) = s집합에 원소 하나 추가

          s.update( ) = s집합에 여러 원소 추가
          != s.union( ) = 출력은 같지만, 아예 새로운 집합이 생김

          s.remove( ) = s집합에서 원소 제거


     > 사전(Dictionary)이란 : 
        = 파이썬에서 리스트와 함께 굉장히 많이 사용되는 구조!
        = 데이터 타입 중 가장 powerful + 신기함 + 많은 활용 용도를 갖고 있음

          - 파이썬에서 제공하는 사전 자료형 : key - value 방법을 통해 저장함
          - 엑셀에 table 만드는 것처럼 table concept을 의미함
               ㄴ 정수 index가 X, key값을 통해서 value를 access 한다!
                   (특정 이름/번호 등 데이터를 지칭할 수 있는 값인 key를 세팅
                    -> 내가 원하는 데이터를 value에 넣고
                    -> key값들을 통해 접근이 가능하다 = 몇 번째인지 몰라도 이름/번호로 찾을 수 있다)

        ㅇ 전문 용어 : Hash Table

출처: wikipedia - search algorithm

      ㅇ 파이썬에서 사전 자료형 : { } 이용
          ㄴ 집합(set)과 차이를 두기 위해 원소에 반드시 : 가 들어감
          ㄴ 사전 표현 : {'key' : 'value', 'key2' : 'value2', ...}

      ㅇ 사전 만드는 방법 :

빈 사전 입력 후 = key, value 입력

          # 인덱싱을 했을 때 이미 있으면 수정, 없으면 생성됨 : 

          # 사전을 만들 때 key는 중복이 있으면 안 된다. (중복되면 하나만 남기고 나머지 사라짐)
          # 집 주소라 생각해보자. 주소는 중복이 되면 안 되고, 마음대로 바꿀 수도 없다!

중복 돼서 'a' 하나 빼고 없어짐

      ㅇ 사전 관련 함수 :

          D.keys( ) = 사전의 모든 key값들 보기

          D.values( ) = 사전의 모든 value들 보기

          D.items( ) = 사전의 모든 key, value 쌍 보기

          D.get('key값') = 사전의 원소 가져오기
               ㄴ key값이 존재할 때 & 존재하지 않을 때
               D.get('key값', '지정 key값') = 만약 입력한 'key값'이 존재하지 않는다면 새로 '지정 key값'으로 저장하게 됨

key값이 존재할 때!
key값이 존재하지 않아서 NEW 지정key값으로 저장!

 

          # '~' in D = '~' in D.keys( ) 사전에 해당 key값이 존재하는지 확인하기
               ㄴ in이라는 operator는 사전뿐만 아니라 모든 연속형 데이터 타입에 사용 가능
               ㄴ 사전의 경우 : 해당 원소가 존재하는지 True/False를 알려줌!
          # '~' in D.values( ) = 사전에 해당하는 value값 존재하는지 확인


 

공부할 걸 토대로 [Programming Practice] 연습 문제를 풀었다.

막상 혼자 처음부터 적어보려니까 굉장히,, 뭐랄까, 뭐부터 써야 될지 모르겠네...
코린이 탈출할 수 있겠쥬.....? 

파이팅..!⭐

 

 

print("to be continued...")

댓글