Today I Learned

[TIL] 파이썬 기초 (반복문, 조건문, 조건부확률)

by Holly Yoon

TIL

1. 데이터 규모에 따른 도구들

  • 엑셀 : 사용이 간편, 데이터 100만개, 만들어진 기능만 사용할 수 있다. 속도가 느리다.
  • 파이썬 : 파이썬 문법을 따르며, 데이터 RAM 용량만큼 사용할 수 있다.(가상 메모리 DASK 라이브러리 사용할 수도 있음) 기능을 만들어서 사용가능하며, 속도가 빠르다. 
  • 데이터베이스 : SQL문법을 따르며, 데이터 SSD(HDD) 용량만큼 사용할 수 있다. 속도가 빠르다.
  • 빅데이터 : 여러 대의 컴퓨터를 1대의 컴퓨터처럼 사용하는 것. SPARK를 사용하며 scala언어를 배워야한다.

2. 연산자

  • 산술 : +, - < * / // % < ** ; 루트를 표현하기 위해서 **0.5 사용
# 나이를 입력받아 연령대로 출력하는 코드 작성
age = 49
ages = age // 10 * 10
ages # 30
  • 할당 : 누적해서 산술 연산을 수행한다. 
data = data + 5 
data += 5
  • 비교 : ==, !=, >, <, >=, <=
  • 논리 : not > and > or (*비교연산자 : 조건1개, 논리연산자 : 조건2개이상)
  • 멤버 : in, not in 특정 데이터가 컬렉션 데이터에 포함되어 있는지를 확인한다. 

3. 실수하기 쉬운 부동소수점 연산

# 실수 할만한 코드 2
data1, data2 = 0.1, 0.2
(data1 + data2) == 0.3
>>> false
  • 소수점 이하가 있어서 결과값이 0.3과 같지 않다.
  • 해결책1) round()를 사용하여 소수점 1자리 수로 만들어 계산
  • 해결책2) 고정 소수점 연산(연산속도가 느려질 수 있다.)
from decimal import Decimal
print(float(Decimal(str(data1)) + Decimal(str(data2))))
float(Decimal(str(data1)) + Decimal(str(data2))) == 0.3

4. 조건문 if/elif/else

  • 삼항연산자 : 간단한 조건문으로 한줄코드를 작성하는 방법
# <true data> if <condition> else <false data>
balance, draw = 10000, 2000
result = "인출가능" if balance >= draw else "인출불가"

5. 반복문 

  • 특정 코드를 반복적으로 실행하여 코드 유지, 보수를 향상 시킨다.
  • while, for, break, continue, range(), enumerate(), zip()
# enumerate() : 반복문에서 리스트 데이터에 idx 숫자를 출력할때 사용
for idx, user in enumerate(users):
    print(idx, user)
    
# zip() : 같은 인덱스의 데이터끼리 튜플로 묶어서 리스트로 출력
players = ['손흥민', '메시', '호날두']
goals = [30, 20, 10]
games = [50, 30, 40, 20]

for data in zip(players, goals, games):
    print(data)

6. 조건부 확률

  • 사건 A가 발생했다는 조건에 사건 B가 발생할 확률
  • 사건 A가 발생했을때 사건 B의 조건부 확률
  • 𝑃(𝐵|𝐴)=𝑃(𝐵𝐴)𝑃(𝐴)
import pickle
with open('/purchase_apple.pkl', 'rb') as file:
    data = pickle.load(file)

iPhone구매 고객에게 iPad구매 유도 마케팅을 하면 좋을까? iPhone구매자가 iPad를 구매할 확률
(* 해당 데이터에는 시계열 데이터가 없어서 정확한 데이터 분석은 어려움)

#P(iPad | iPhone)를 구하기 위해, 필요한 데이터
#전체 고객 수 -> total
#P(iPad) -> ipad/total
#P(iPhone) -> iphone/total
#P(iPhone&iPad) -> both/total

total = len(data)
iphone=ipad=both =0
for user in data:
    iphone += user['iPhone']
    ipad += user['iPad']
    if (user['iPhone']==1) and (user['iPad']==1):
        both += 1
total, iphone, ipad, both

P(iPad | iPhone) = (both/total)/(iphone/total)
P(iPhone) = iphone/total
P(iPad) = ipad/total
 

7. 수업 퀴즈, 직접 풀이해 본 것

Quiz1) 윤년 찾기

# Quiz 1. 년도를 입력받아 윤년이면 True, 아니면 False 출력하는 코드 작성
# 4년에 한번씩 윤년 O
# 100년에 한번씩 윤년 X
# 400년에 한번씩 윤년 O
# year = 2008 # True
# year = 1900 # False
# year = 2000 # True

year = int(input('년도를 입력해주세요:'))
if (year%400==0):
    print('윤년입니다')
else:
    if (year%100==0):
        print('윤년이 아닙니다')
    else:
        if (year%4==0):
            print('윤년입니다')
        else:
            print('윤년이 아닙니다')
            
#박두진 강사님 풀이
year = 2000
(year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

Quiz2) Fizzbuzz

# Quiz 2. fizzbuzz
# 3의 배수 : fizz, 5의배수 : buzz, 3과 5의 배수 : fizzbuzz 출력
# 위의 조건에 해당하지 않으면 data 출력

data = 17

if (data%15==0):
    print('fizzbuzz')
else:
    if (data%5==0):
        print('buzz')
    elif (data%3==0):
        print('fizz')
    else:
        print(data)

#박두진 강사님 풀이
data=10
if data %3 ==0:
	print('fizz', end='')
if data %5 ==0:
	print('buzz')
if not (data%3==0)or(data%5==0):
	print(data)

Quiz3) Left, Right

# Quiz 3. left shift
# data = 'abcde'
# shift = 3 # deabc

data = input()
shift = int(input())

if len(data)>shift:
    answer = data[shift:] + data[:shift]
    print(answer)
else: print('종료')

#박두진 강사님 풀이
data = input()
shift = int(input())

shift=shift%len(data)
while shift:
	shift -= 1
    data = data[1:] + data[0]
data

***

  1. enumerate(), zip() 개념을 다시 정리해보았다.
  2. 알고리즘 문제를 더 많이 풀어보면서 연습해야겠다.
  3. 현재 진도로 봤을 때, pandas예습 빨리 해야할 것 같다. 확실히 알고 듣는거랑 모르고 들었을 때 이해도 차이가 크다.

블로그의 정보

Study Log by Holly

Holly Yoon

활동하기