AI School 8기 (LIKELION, 22.12~23.05)

[AI School/TIL] Python 2일차_23.01.03

data_start_ 2024. 2. 23. 15:27

 

2023.01.03 (화) 파이썬 2일차 강의를 들었습니다.

 

연산자에 대한 수업을 진행하기 전에 데이터 규모에 따른 스킬에 대한 배경설명이 진행되었습니다.

[데이터 규모에 따른 스킬들]

데이터베이스 SQL / Python / Excel로 데이터를 다루는 것이 각각 어떤 차이점이 있는지 ?

1. 엑셀

: 데이터 100만개, 만들어진 기능만 사용 가능하다, 속도가 느리다, 사용이 간편함

2. 파이썬

: 데이터 RAM 용량만큼, 기능을 만들어서 사용 가능하다, 속도가 빠름 (넘파이 패키지), 파이썬 문법

2-1. DASK

: 파이썬 가상메모리 사용 (데이터베이스 구축하지 않아도 되는 장점이 있음)

ex) H기업에서 사용하는 사례가 있었음.

3. 데이터베이스

: 데이터 SSD(HDD) 용량만큼, 속도가 빠름(파이썬보다 빠름), SQL문법 (쿼리문)

4. 빅데이터

: 여러개의 컴퓨터를 1대의 컴퓨터처럼 사용, SPARK, scala

ex) KT IPTV 하루에 1테라가 넘게 데이터 쌓임, 컴퓨터 여러대에 데이터를 분산해서 저장하고, 1대에서 처리하듯 사용


[Python 문법 2]

오늘은 연산자, 에 대해서 자세히 알아보는 시간을 가졌습니다 :)

 

1. 연산자 : CPU를 사용하는 방법

  • 산술, 할당, 비교, 논리, 멤버 5가지

 

(1) 산술 연산자 : 데이터와 데이터를 연산해서 데이터 출력

  • +, -, <, *, /, //, %, <, **

* 응용 문제 *

# 나이를 입력받아 연령대로 출력하는 코드 작성
age = int(input('나이를 입력해주세요'))
ages = age // 10 * 10
ages
 
  • 연산자 우선순위
  • 데이터 타입에 따른 연산자 사용
  • 데이터 타입에 따라서 수행되는 연산이 다르다.
  • 데이터 타입의 형변환 : int(), float(), bool(), str(), tuple(), dict()

-형변환이 되는 경우, 안되는 경우가 있음

-['A', 'B', 'C'] -> list('ABC') 로 쓰는 게 더 나을 수 있음

-추가적인 연산과 형변환

d1, d2, d3, d4 = 1, 2, '3', '4'
d5, d6 = [1, 2], list('ABC')
print(d5 + d6, d6 * 2, d4 * 5)
 

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

 

 

(2) 할당 연산자 : 누적해서 산술연산 수행

-data = data + 5

-data += 5 (시그마)

 

(3) 비교 연산자 : 데이터와 데이터를 연산해서 논리값 출력

  • ==, !=, >, <, >=, <=
  • 수식의 문법이 맞으면 True, 틀리면 False 출력

* 응용 문제 *

# ATM 기기 코드로 구현
# 인출이 가능하면 True, 불가능하면 False 출력
# 인출금액을 입력받아서 처리 : input()
balance = 10000
draw = int(input('insert draw amount : '))
balance >= draw
 

(4) 논리 연산자 : 논리값와 논리값를 연산해서 논리값 출력

  • not, and, or
  • 우선순위 : not> and > or

-and는 T하고 묶어서 기억, or는 F하고 묶어서 기억

-and(T : T and T = T) | 두 개의 조건이 모두 T여야 T

-or(F : F or F = F) | 두 개의 조건중 하나만 T여도 T

  • 조건이 2개 이상일 때 사용 (cf. 조건이 1개면 비교 연산자 사용)

* 응용 문제 *

# ATM 기기 업그레이드
# 1회당 최대 인출금액은 5000원 입니다.
# 잔고보다 인출금액이 작거나 같음 : 최대인출금액 5000원
# 인출이 가능하면 True, 불가능하면 False 출력
balance = 10000
draw = 4000
(balance >= draw) and (draw <= 5000)
 

(5) 멤버 연산자 : 특정 데이터가 컬렉션 데이터에 포함되었는지 확인하는 연산자 (결과는 논리값으로 출력됨)

  • in, not in

* 응용 문제 *

# 선수명단에서 손흥민이 있으면 True 출력
players = ['메시', '손흥민', '호날두']
'손흥민' in players
 

2. 조건문 : 특정 조건에 따라서 다른 코드를 실행

  • if, elif, else
  • bool() 형변환 했을때 False가 나오는 데이터 : bool(0), bool(0.0), bool(''), bool([]), bool(()), bool({})
# 점수를 입력받아 학점을 출력하는 코드 작성
# 90 >= A, 80 >= B, 70 >= C, 60 >= D, F
point = int(input('학점을 입력하세요: '))

if point >= 90:
    print('A')
elif point >= 80:
    print('B')
elif point >= 70:
    print('C')
elif point >= 60:
    print('D')
else:
    print('F')
 

3. 삼항연산자 : 간단한 조건문(if, else로 되어있는 간단한 조건)을 한줄의 코드로 작성하는 방법

  • <true data> if <condition> else <false data>
  • lambda 함수, 리스트 가공할 때 사용함

 

4. 반복문 : 특정 코드를 반복적으로 실행 (코드 유지보수 향상)

  • while, for, break, continue, range(), enumerate(), zip()

 

(1) while

  • 무한루프에 빠지지 않도록 조심 ! (런타임에 실행중단으로 중단하기)
  • 조건을 확인하는 코드에 True, False가 아니면 bool() 형변환 해서 판단
# while True:
week = list('일월화수목금토')
for day in week:
    if (day == '일') or (day == '토'):
        print(day, '주말', '육아')
    else:
        print(day, '주중', '강의, 육아')
 

(2) for

  • _ : 식별자로 사용될때 사용되지 않는 식별자로 사용
  • range(end) /range(start, end) /range(start, end, stride) : 리스트를 만들어주는 함수
week = list('일월화수목금토')
for day in week:
    if (day == '일') or (day == '토'):
        print(day, '주말')
    else:
        print(day, '주중')
 

* 응용 문제 *

# 랜덤한 숫자 먼저 맞추기 게임

# 1. 0 ~ 9의 랜덤한 숫자 생성
import random
random_number = random.randint(0, 9)

# 2. 숫자를 입력한 횟수를 카운팅하는 변수 선언 : count
count = 0

# 3. 아래의 내용 반복 : while True:
while True:

#   3-1. 숫자를 입력 받음 : int(input())
    input_number = int(input('insert number(0~9) : '))

#   3-2. 카운팅 +1 추가 : count +=
    count += 1

#   3-3. 랜덤한 숫자와 입력받은 숫자가 같은지 확인 : if ==
    if random_number == input_number:

#   3-4. 같으면 카운팅 횟수 출력 > 게임 종료 : print() break
        print(f'count : {count}')
        break

#   3-5. 다르면 up, down 출력하기
 

(3) enumerate() : 반복문에서 리스트 데이터에 idx 숫자를 출력할 때 사용

  • 튜플 데이터 타입은 여러개 변수로 받을 수 있다의 개념이 사용 됨
  • 추후에 판다스 패키지로 데이터 전처리할 때, 사용 됨

 

(4) zip() : 같은 인덱스의 데이터끼리 튜플로 묶어서 리스트로 출력

  • 가장 작은 데이터 개수를 기준으로 묶임

[jupyter notebook 사용팁]

1. 매직 커맨드로 파일 시스템을 다루는 방법

%reset

%whos

%ls

%%writefile data.txt

%cat data.txt

 

2. Shell 커맨드 : system(OS)에서 제공

구글 서버 컴퓨터 OS는 ubuntu

-ubuntu 명령어 실행은 '!' 사용

-리스트 형태로 저장 가능

!ls

!free -h (컴퓨터 남은 메모리 알려줌)

!df -h

-파이썬 패키지 설치할 때, 시스템 명령어 사용함

!pip install konlpy (한국어 자연어 처리해주는 패키지...)

*시스템 엔지니어링에서 서버 배울 때, 더 자세히 배움


[수업을 마친 소감]

가장 중요한 조건문, 반복문을 학습하면서...

알고리즘을 구성할 때 어디까지 반복해야 하고, 어떨 때 멈춰야 하는지 정리를 하는 과정이 제일 중요한 것 같다는 생각이 들었습니다.

 

물론 입력받은 변수를 형변환시켜서 출력시키는 과정도

데이터 가공하는 과정을 생각해서 코드를 짜야겠다는 생각도 들었습니다.

 

점점 앞 시간에 배운 것들이 누적되서 코드 작성이 풍성해지고 있는데요, 데이터 타입의 특징을 가지고 이렇게 활용할 수 있구나!라고 알게 되는 것들이 있어서 더욱 재밌는 시간이었습니다 :)