본문 바로가기

부트캠프/멀티캠퍼스_퍼포먼스 마케팅과 데이터 분석

[멀티캠퍼스 부트캠프 3주차] 데이터 분석 기본_파이썬 기초(조건문과 반복문, 함수 기초)

데이터 분석 기본_파이썬 기초(조건문과 반복문, 함수 기초)


 

Data Science Lifecycle

 

데이터 분석 커리큘럼

1) 파이썬 기초

 -파이썬 환경설정

 -파이썬 기초

2) 파이썬 응용

 -웹 크롤링

 -데이터 시각화

 -확률통계

3) 인공지능

 -머신러닝

 -딥러닝

 

데이터 분석 사례

-데이터 수집 → 시각화 → 추천 시스템


파이썬 시작하기

-아나콘다 다운로드

-주피터 노트북 UI 및 단축키

 


 

파이썬 기초

자주 쓰는 단축키

-입력 모드: 셀 안쪽 선택(enter)
-단축키 모드: 셀 왼쪽(전체) 선택(esc)

 

-a: 선택한 셀 위에 새로운 셀 추가
-b:    "    아래에      "
-dd: 셀 삭제
-z: 삭제된 셀 되살리기

 

-shift + enter: 실행 후 다음 셀로 이동
-ctrl + enter: 현재 셀에서 실행
-i: 셀 실행 취소

 

-ctrl + /: 주석 처리

 

-m: 마크다운(텍스트 꾸미는 문법)

 → 실행하면 '헤딩'(제목)
 → 샵이 많을수록 글씨 작아짐

-y: 마크다운을 다시 주석으로 되돌림

 

-Shift + m: 셀 합치기(단축키 모드에서)

 

-pwd(present working direct): 현재 작업경로

 


 

변수와 자료형

1. 숫자

 -정수(int)

 -실수(float)

print(10/2)  # 나눗셈 >>> 5.0 
print(3*5)  # 곱셈 >>> 15
print(2**3)  # 제곱 >>> 8
print(7//2)  # 몫 >>> 3
print(7%2)  # 나머지 >>> 1

 

 

2. 문자열(string)

-따옴표(", ')로 감싸면 문자열

print("데이터 분석")
print("123")  # 숫자 x, 문자열 o

-문자열 덧셈 가능 → 문자열끼리 이어붙여서 쓰게 됨

-문자열 곱셈 가능

print("안녕"+"하세요")  # >>> 안녕하세요
print("---"*3) # >>> ---------

 

 

3. 변수 및 함수

- = : 오른쪽 내용을 왼쪽 변수에 저장

-len() : 데이터 길이 확인 함수(정수는 길이 알 수 x → 문자열로 만들어 주어야 함)

-함수 용법 2가지 꼴

  • 함수(데이터)
  • 데이터1.함수(데이터2)
# a라는 변수에 "멀티캠퍼스"
# b라는 변수에 "파이썬 데이터 분석"
# 문자열 덧셈을 수행하고, len 함수로 길이 확인 후 c라는 변수에 저장하여 print함수로 출력

a="멀티캠퍼스"
b="파이썬 데이터 분석"
c=len(a+" "+b)
print(c)  # >>> 16

 

 

4. 리스트

1) 리스트 생성

 - [] : 리스트, 인덱싱

 - {} : 딕셔너리

 - () : 함수

 -리스트: 순서(index)가 있는 일렬로 정렬된 데이터 바구니(순서는 0부터 시작)

  ※리스트 안에는 다양한 데이터 형태 들어갈 수 있음(리스트 안 리스트도 가능)

# 정수 1~10까지 마음대로 숫자 3개 선택해서 리스트로 만들고 list_num 변수에 저장
# 점심 메뉴 3개 리스트로 묶어서 menu 변수에 저장

list_num=[4, 2, 8]
menu=["오므라이스", "라멘", "김치찌개"]
print(list_num)  # >>> [4, 2, 8]
print(menu)  # >>> ['오므라이스', '라멘', '김치찌개']

 

2) 리스트 데이터 추가 및 삭제

 -.append(데이터값) : 리스트에 데이터 추가

  → 새로 추가한 값은 맨 뒤로 들어감

-.pop(위치값) : 리스트의 (마지막) 데이터 삭제

  → 사실상 pop()은 pop(-1)임

price = [500, 600, 700, 800]
price.append(900)  # >>> [500, 600, 700, 800, 900]
price.pop()  # >> [500, 600, 700, 800]

 

 

5. 인덱싱과 슬라이싱

1) 인덱싱

 -위치나 조건으로 원하는 데이터 찾기

 -대괄호 [] 사용

 -[0, 1, 2, ..., -3, -2, -1]

 -인덱스 사용하여 값 수정 가능

# 첫 번째 제품의 가격이 550으로 올랐다면?
price[0] = 550
price  # >>> [550, 600, 700, 800]

 

2) 슬라이싱(구간으로 인덱싱)

 -찾고싶은 첫 번째 값 index : 찾고 싶은 마지막 값 index + 1

   → 첫 번째 값부터 시작하되 콜론 뒤 숫자는 포함 x

 -맨 앞의 0 생략 → 처음 값(0)부터

 -맨 뒤의 0 생략 → 마지막 값(-1)까지

 -앞뒤 숫자 모두 생략 → 전체 데이터 슬라이싱

price[0:2]  # >>> [550, 600]
price[:3]  # >>> [550, 600, 700]
price[1:]  # >>> [600, 700, 800]
priec[:]  # >>> [550, 600, 700, 800]

 


연산자

1) 비교 연산자

>= : 이상
> : ~보다 크다
== : 같다
!= : 같지 않다

 

2) 논리 연산자

and : 두 값이 모두 참인 경우 True. 하나라도 거짓이면 False
or : 줄 중 하나라도 참이면 True
not : 역으로 판단
if (1==1) and (2==3):
    print("True")
else:
    print("False")
# >>> False

 


 

조건문과 반복문

1. 조건문

-if-elif-else문

if 조건1:
	실행문1
elif 조건2:
	실행문2
else:
	실행문3

-elif는 여러 개 올 수 있음

-조건1이 True일 때 실행문1이 실행되고, False이면 다음 조건 확인

-조건2가 True일 때 실행문2가 실행되고, False이면 실행문3 실행

# Q. 점수에 따라 학점을 부여하는 프로그램을 만들고 싶다.
# 60점 미만은 F, 60점 이상 90점 미만이면 B, 90점 이상은 A
i = 0 # -> 변수를 지정해서 숫자만 바꾸면 되도록
if score[i] >= 90:
    print("A")
elif score[i] >= 60:
    print("B")
else:
    print("F")

-input() : 사용자에게 변수에 넣을 값 입력받음

# 입력받은 점수를 가지고 학점 판단하기
score_input = int(input())
if score_input >= 90:
    print("A")
elif score_input >= 80:
    print("B")
elif score_input >= 70:
    print("C")
else:
    print("F")

 

 

2. 반복문

1) for문

 -정해진 횟수/대상을 차례대로 반복

for i in 반복대상:
	실행문
# 'for _ in 반복대상'도 가능
# (의미 없는 변수 나타낼 때. 반복의 의미만을 가짐)
# 가격 각각 출력
price = [100, 200, 300]
for i in price:
	print(i)  # → i가 print 자리에 들어가며 반복됨

 -range(시작 숫자, 끝 숫자, 간격) : 정수의 범위(0, 1, 2, ...)

for i in range(3):
	print("Hi")
# >>> Hi
# >>> Hi
# >>> Hi
# 5부터 10까지 2씩 증가시키면서 반복문 수행
for i in range(5, 10, 2):
	print(i)
# >>> 5
# >>> 7
# >>> 9

 

2) while문

 -어떤 조건이 만족되는 동안 반복 실행

i = 0
while i < 5:
	print(i)
	i = i+1  # → print 후에는 i에 1이 더해진 후 저장됨
    # i +=1 과 동일한 작동 원리

 

※ for문 vs. while문

  for문 while문
언제? 반복 횟수를 정확히 알고 있을 때 반복 횟수는 잘 모르지만, 반복이 중지되어야 할 조건이 명확할때
예시 학생들의 성적을 채점하는 코드 가위바위보에서 '이기면 종료'인 조건이 주어졌을 때

 

실습

# 정수 1부터 10까지 있을 때 각 숫자를 제곱해서 리스트에 저장하는 코드
# range 이용 ver.

square = []
for i in range(1, 11):
	square.append(i**2)
	i = i+1
print(squre)
# >>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 정수 1부터 10까지 있을 때 각 숫자를 제곱해서 리스트에 저장하는 코드
# list 이용 ver.

num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squre_list = []

for i in num_list:
    square_list.append(i**2)
print(square_list)
# >>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

3) break

 -반복하다가 중간에 멈추게 함

for i in range(10)  # 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
	if i == 4:  # i가 4가 되면
		break  # 반복문을 멈춤
	print(i)
# >>> 0
# >>> 1
# >>> 2
# >>> 3

※ print()가 if절에 들어가 있으면 출력 안됨

 

4) continue

 -특정 조건에서 남은 명령을 건너뛰고 다음 반복문으로 넘어감

for i in range(5):
	if i == 3:  # 결과에 3이 제외되어있음
		continue
	print(i)
# >>> 0
# >>> 1
# >>> 2
# >>> 4

※ 변수명 짓기 주의사항

  -기존의 예약어(int, float, if, for, ...)는 사용 불가

 


함수

1. 함수 기초

1) 함수(fucntion)

 : 코드의 덩어리

 -재활용 측면에서 유리

def 함수이름(매개변수1, 2, ...):  # 매개변수(parameter)에 들어가는 것을 '인수(argument)'라 부름
	명령문1
	명령문2
	return 반환값  # 반환값 없을 수도 있음
# 두 수의 합을 구하고 반환(output)하는 함수 정의
def num_sum(a, b):
	c = a+b
	print(c)
	# return c
    
# 함수의 호출
num_sum(1, 2)
# >>> 3

 

2) print vs. return

 -print: 전광판(실재하는 것은 x. 저장되지 않음)

def num_sum(a, b):
	c = a+b
	print(c)
d = num_sum
# >>> d  → 변수에 저장되지 않음

 -return: 실물 output이 우리에게 옴

def num_sum(a, b):
	c = a+b
	return c
d = num_sum
# >>> a+b

 

실습

# 사각형의 넓이 구하는 함수 정의
def cal(x, y):
	# x: 사각형의 가로 길이
	# y: 사각형의 세로 길이
	return x*y
 
 cal(10, 20)
 # >>> 200
# 성적을 입력받아 학점을 반환하는 함수 정의
def grade_define:
	if score > 80:
		return "A"
	elif score >= 60:
		return "B"
	else:
		return "F"

grade_define(92)
# >>> 'A'

 

 

2. 함수 심화

1) 지역 변수와 전역 변수

 -지역 변수: 함수 안에서만 정의됨(함수 밖에서 호출 시 '변수 정의 x' 오류)

 -전역 변수: 프로그램 전체에서 정의됨

x = 10  # 전역변수
def test(t):
	t = 20  # 지역변수
	print(t)  # >>> 아무것도 나오지 x. 정의만 했을 뿐

test(x)  # >>> 20 (위에서 정의한 test(t)에 의함)
print(x)  # >>> 10
def f():  # 매개변수 없음
	s = "I love London"  # 지역 변수 s
	print(s)
s = "I Lone Paris"  # 전역 변수 s

f()  # >>> I love London
print(s)  # >>> I love Paris

 -global 변수명: 지역 변수를 전역 변수로 바꾸어줌

def f():
	global s 
    s = "I love London"
	print(s)
s = "I love Paris"

f()  # >>> I love London
print(s) # >>> I love London

 

 

3. 함수의 인수

1) 키워드 인수

 : 매개변수의 변수명을 사용하여 함수의 인수 지정(등호 = 사용)

 -인수의 순서 바꾸어도 매개변수 이름만 제대로 작성하면 작동

def print_something(my_name, your_name):
	print("Hello {0}, my name is {1}".format(your_name, ny_name)

print_something("Jye", "Chani")
# >>> Hello Chani, my name is Jye
print_something(your_name = "Chani", my_name = "Jye")
# >>> Hello Chani, my name is Jye

 

2) 디폴트 인수

 : 매개변수에 기본값 지정

 -사용자가 아무것도 넣지 않아도 디폴트 값으로 자동으로 인식

 -통계에서 제공하는 수치에 많이 사용

def print_something_2(my_name, your_name = "Chani"):  # your_name에 기본값으로 "Chani"가 저장됨
    print("Hello {0}, my name is {1}".format(your_name, my_name))

print_something_2("Jye", "Chani")
# >>> Hello Chani, my name is Jye
print_something_2("Jye", ) # 두 번째 매개변수 입력 x -> 디폴트 인수로 저장된 "Chani" 할당
# >>> Hello Chani, my name is Jye

 

3) 가변 인수

4) 키워드 가변 인수

 

 

4. 좋은 코드를 작성하는 방법

1)  코딩 규칙

-들여쓰기는 4 스페이스
-한 줄은 최대 79자까지
-불필요한 공백은 없애기
-'=' 연산자는 1칸 이상 띄우지 않는다
-주석은 항상 갱신하고 불필요한 주석은 삭제한다
-소문자 l, 대문자 O, 대문자 I는 사용을 금한다
-함수명은 소문자로 구성하고, 필요하면 밑줄로 구분한다

 

2) 함수 개발 가이드라인

-함수 내용은 가능하면 짧게
-함수 이름에 역활도 의도 명확히
-한 가지 함수는 한 가지 역할을 하도록
-함수를 만들어야 하는 경우

  • 공통으로 사용되는 코드를 함수로 반환
  • 복잡한 로직이 사용되었을 때 식별 가능한 이름의 함수로 변환

 

실습 1)

AIVE 카페의 키오스크 시스템을 설계하세요. 운영하는 메뉴는 [아메리카노, 라떼, 스무디] 입니다.

주문할 메뉴와 수량, 그리고 할인 쿠폰 번호를 입력받아 최종 결제 금액을 계산하는 프로그램입니다.

 

menu_list = ['아메리카노', '라떼', '스무디']

 

1. 입력: 사용자로부터 "메뉴명 수량 쿠폰번호"를 공백으로 구분하여 한 번에 입력받습니다. (예: 카페라떼 3 AIVE-1234)

 

2. 메뉴 및 가격:

아메리카노: 3,000원

라떼: 4,000원

스무디: 5,000원

* 이외 메뉴가 들어오면 "해당 메뉴는 없습니다."를 출력하세요.

 

3. 할인 혜택 (쿠폰):

- 입력된 쿠폰 번호가 "AIVE"로 시작하면 전체 금액에서 2,000원 보너스 할인을 적용합니다. (힌트: startswith() 메서드 활용)

 

4. 결과 출력: f-string을 사용하여 "최종 결제금액은 {최종 결제금액}입니다." 를 출력하세요.

# 사용자 입력
user_input = input("메뉴명, 수량, 쿠폰번호를 공백으로 구분하여 입력해주세요 \n
		(예: 라떼 3 AIVE-1234)\n)
print(user_input)
# 문자열 분리
menu = user_input.split(" ")[0]
count = user_input.split(" ")[1]
coupon = user_input.split(" ")[-1]
# 메뉴별 가격 설정
menu_list = ['아메리카노', '라떼', '스무디']
if menu in menu_list:
    # pass  # 자세한 내용 쓰지 않고 구조만 잡아두고 싶을 때
    if menu == menu_list[0]:
        price = 3000
    elif menu == menu_list[1]:
        price = 4000
    else:
        price = 5000
else:
    print("해당 메뉴는 없습니다")
print(price)
# 최종 결제금액 산출
if coupon.endswith("AIVE"):
    discount = 2000
else:
    discount = 0

total_price = price*count-discount
print(f"최종 결제 금액은 {total_price}원 입니다")

 

 

실습 2)

1. 문제 설명: 주차장 출차 차량의 번호를 확인하고, 차량 종류와 시간에 따른 주차 요금을 알려주는 프로그램을 작성하세요.

  허용되는 차량 종류는 승용차, 트럭, 기타 입니다.

 

2. 입력: 사용자로부터 "차종 주차시간(분)"을 공백으로 구분하여 한 번에 입력받습니다. (예: 승용차 135)

 

3. 요금 정책 (10분당 요금)

- 승용차: 500

- 트럭: 800

- 기타: 1,000원

 

4. 요금 계산법: (주차시간(분) // 10) * 10분당 요금으로 계산합니다. (10분 미만은 버림 처리

- // : 나머지는 버리고 몫만 남기는 연산자 (ex. 125//10 = 12)

 

5. 결과 출력: f-string을 사용하여 "총 요금은 {최종 요금}입니다." 라고 출력하세요.

 

6. 입력 출력 예시

입력 예시                  출력 예시                                    설명

승용차 135       총 요금은 6500원입니다.        130분(13개 묶음) × 500

기타 60            총 요금은 6000원입니다.         60분(6개 묶음) × 1,000원

# 사용자 입력 받기
user_input = input("차량 정보를 입력하세요. 차종 주차시간(분)을 공백으로 구분하여 입력하세요.
	\n (예: 승용차 135) \n")
user_input
# 입력 문자열 분리
car_type = user_input.split(' ')[0]
time_parking = int(user_input.split(' ')[1])  # 주차시간(분) 

print(car_type, time_parking)
# 차종에 따른 10분단 주차 요금 결정
if car_type == '승용차':
    rate_per_10min = 500   # 승용차의 10분당 요금
elif car_type == '트럭':
    rate_per_10min = 800
else:
    rate_per_10min = 1000
# 10분당 요금
print(rate_per_10min)
# 총 주차요금
total_fee = (time_parking//10)*rate_per_10min
print(f"최종 주차요금은 {total_fee}원 입니다.")

 

#부트캠프후기 #멀티캠퍼스부트캠프 # 데이터마케팅부트캠프