AI School 8기 (LIKELION, 22.12~23.05)

[AI School/TIL] Python 1일차_23.01.02

data_start_ 2024. 2. 23. 14:18

2023년 1월 2일 (월)

박두진 강사님의 수업으로 본격적인 파이썬에 대한 강의가 시작되었습니다.

 

[Intro_Python]

파이썬 언어에 대한 이해를 돕기 위해서, 프로그래밍이 무엇인지에 대한 전반적인 흐름을 익혔습니다.

 

What is Programing?

: OS(Operating System)에서 CPU, RAM, SSD를 사용하여 컴퓨터에게 연산 과제를 수행하게 하는 절차 및 방법

 

1. Computer Structure

  • CPU - 중앙처리장치
  • RAM - 메모리
  • SSD (HDD) - 하드디스크

 

EX) 엑셀파일을 실행해서 연산 수행 후, 파일 저장하는 과정

Step 1. 엑셀 실행

-SSD에 있는 Excel Code를 RAM으로 이동 (loading)

 

Step 2. 엑셀 화면 출력

-RAM에 있는 Excel Code 저장

 

Step 3. 엑셀 연산

-CPU를 이용해서 연산

 

Step 4. 엑셀 파일 저장

-RAM에 있는 데이터를 SSD에 저장

 

2. Compiler

Code를 Binary(2진수)로 바꿔주는 역할을 하며, 언어마다 다름

  • Compiler Language : Build과정이 필요(코드 실행 전 Compile 파일 필요), 속도 빠름
  • Interpreter Language : Build과정이 불필요

 

[python 환경 설정 방법]

1. 개인pc 세팅

Python / ipy, jupyter notebook 또는 다른 에디터로 작업 (직접 환경설정을 해야 함)

-> Python + ipy, jupyter notebook이 합쳐진 게 Anaconda

 

2. 서버pc 세팅

Python / ipy, jupyter notebook 또는 다른 에디터로 작업 (직접 서버와 인터넷 설정을 해야 함)

pc브라우저에서 IP망으로 서버 컴퓨터에 작업

 

3. 구글서버 세팅

Colab을 pc브라우저에서 사용 (환경설정이 알아서 진행되서 편함)


[Python 문법 1]

본격적인 파이썬 문법에 대한 수업이 진행되었습니다 !! 오늘은 변수 선언, 데이터 타입에 대해서 자세히 알아보는 시간을 가졌습니다 :)

 

1. 변수 선언

: RAM에 저장공간을 만들어서 데이터를 저장하는 문법

 

* 식별자 : 저장 공간을 구별해주는 문자열

(1) 식별자 규칙

  • 문법 : 틀리면 에러가 발생 (코드 실행 안 됨)

-대소문자, 숫자, _ 사용가능

-가장 앞에 숫자는 입력 못 함 ex) 1_data (x)

-명령어(예약어) 사용 못 함 ex) def, if, for

 

  • 컨벤션 : 틀려도 코드 실행은 되지만 보기에 좋지 않음 (PEP8 참고하기)

-변수 : jupyter_notebook (snake_case)

-상수 : 대문자로 작성 ex) JUPYTER_NOTEBOOK

 

(2) 변수 선언 방법

  • 식별자 1개, 데이터 1개

data1 = 1

  • 식별자 n개, 데이터 n개

data2, data3 = 2, 3

  • 식별자 n개, 데이터 1개

data4 = data5 = 4

 

QUIZ

# 방법1
player1 = 'son'
player2 = 'messi'
goal1 = 30
goal2 = 30
print(player1, goal1, player2, goal2)

# 방법2
player1, player2 = 'son', 'messi'
goal1 = goal2 = 30
print(player1, goal1, player2, goal2)
 

2. 데이터 타입

: RAM을 효율적으로 사용하는 문법

 

* 동적 타이핑 : 인터프리터 언어의 특징으로, 변수 선언을 할 때, 데이터 타입 지정을 하지 않아도 자동으로 데이터 타입이 지정

 

(1) 기본 데이터 타입

  • int
  • float
  • bool
  • str

 

(2) 컬렉션 데이터 타입

  • list
  • tuple
  • dictionary
  • set
구분
특징
선언
list
순서가 있고, 수정이 가능
[ ]
tuple
순서가 있고, 수정이 불가능
( )
dict
순서가 없고, 수정이 가능 (키값을 사용해서)
{ : }
set
집합 데이터 표현, 중복 데이터 허용하지 않음
(교집합, 합집합, 차집합)
set( )

 

* list 대신 tuple을 사용하는 이유

: 같은 데이터를 가지고 있으면 tuple이 list보다 저장 공간을 적게 사용.

import sys

d1, d2 = [1, 2, 3], (1, 2, 3)

sys.getsizeof(d1), sys.getsizeof(d2)
 

출력 결과 -> (80, 64)

 

* 교집합, 합집합, 차집합

# 교집합 : &, 합집합 : |, 차집합 : -
d1, d2 = set([1, 2, 3]), set([2, 3, 4])
print(d1 & d2, d1 | d2, d1 - d2)
 

(3) masking, update, delete

  • masking (데이터 선택)

-형태 : data[ ]

-[ ] 안에는 [idx], [key], [start:end], [start:end:stride] 로 입력 됨

-start에 데이터 x : 가장 앞, end에 데이터 x : 가장 뒤

-음수 사용하면 뒤에서부터 데이터가 선택 됨

data1 = [1, 2, 3, 'A', 'B']
data1[3], data1[2:4], data1[:2], data1[3:], data1[:], data1[::2]
data1[-2], data1[-2:], data1[::-1]
 

출력 결과 -> ('A', [3, 'A'], [1, 2], ['A', 'B'], [1, 2, 3, 'A', 'B'], [1, 3, 'B'])

('A', ['A', 'B'], ['B', 'A', 3, 2, 1])

 

  • update (데이터 수정)

-형태 : 데이터 선택 = 수정할 데이터

data1 = [1, 2, 3, 'A', 'B']
data1[3] = 'C'
print(data1)
 

출력 결과 -> [1, 2, 3, 'C', 'B']

data3 = {'one': 1, 2: 'two'}
data3['one'] = 10
print(data3)
 

출력 결과 -> {'one': 10, 2: 'two'}

 

  • delete (데이터 삭제)

-형태 : del 데이터 선택

data3 = {'one': 10, 2: 'two'}
del data3[2]
print(data3)
 

출력 결과 -> {'one': 10}

 

(4) 깊은 복사 vs 얕은 복사

# 실수 할만한 코드 1
# 얕은복사, 깊은복사
data1 = [1, 2, 3]
data2 = data1 # 얕은복사 : 주소값 복사
data3 = data1.copy() # 깊은복사 : 데이터 복사
print(data1, data2, data3)
data1[1] = 4
print(data1, data2, data3)
 

출력 결과 -> [1, 2, 3] [1, 2, 3] [1, 2, 3]

[1, 4, 3] [1, 4, 3] [1, 2, 3]

# id() : 식별자의 주소값 출력
id(data1), id(data2), id(data3)
 

출력 결과 -> (139698000010496, 139698000010496, 139698000793344)

 

얕은 복사, 깊은 복사에 대해서 추가 설명을 찾아서, 링크를 남겨봅니다.


[오늘의 과제]

"PEP 8 – Style Guide for Python Code" 읽어보기 !


[수업을 마친 소감]

전반적으로 파이썬을 코딩하는 게 어떤 행위인지에 대해서 개념을 잡을 수 있는 시간이었습니다.

컴퓨터 저장장치에서 어떤 과정을 거치는지 대략적으로 머릿속으로 그리면서 코드가 출력되는 결과물을 보니,

메모리에 어떤 형태로 데이터를 입력하는 게 목적에 적합하게 사용될 수 있을까 앞으로 고민할 수 있는 방향을 다질 수 있는 기초를 배운 것 같아요 ~

메모리에 10을 넣었는데, 메모리 주소, 타입, 저장공간에 대한 정보가 파생되어 나오는 과정이 더욱 흥미롭게 다가왔어요 ! (호기심 발동 *_*)

이제 나만의 실험실에서 변수 선언, 데이터 문법의 퀴즈를 풀어보며,

이런 케이스에는 어떻게 해야하지? 하며 문제를 해결해가는 과정을 즐겨보려고 합니다 !