[TIL] 파이썬 기초 (반복문, 조건문, 조건부확률)
by Holly Yoon
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
***
- enumerate(), zip() 개념을 다시 정리해보았다.
- 알고리즘 문제를 더 많이 풀어보면서 연습해야겠다.
- 현재 진도로 봤을 때, pandas예습 빨리 해야할 것 같다. 확실히 알고 듣는거랑 모르고 들었을 때 이해도 차이가 크다.
'TIL' 카테고리의 다른 글
[TIL] Pandas 시작하기 (0) | 2023.01.10 |
---|---|
[TIL] 파이썬 기초 수업 끝 - (0) | 2023.01.06 |
[TIL] 파이썬 기초 - 클래스, 상속, 상관분석 (0) | 2023.01.05 |
[TIL] 파이썬 기초 (함수/파파고 API) (0) | 2023.01.04 |
[TIL] 파이썬 기초 수업 시작 (변수, datatype) (0) | 2023.01.02 |
블로그의 정보
Study Log by Holly
Holly Yoon