디지털 마케팅 LAB

패스트캠퍼스 데이터분석 부트캠프 3주차_PYTHON (1) 본문

패스트캠퍼스 데이터분석 부트캠프 14기/주차별 학습기록

패스트캠퍼스 데이터분석 부트캠프 3주차_PYTHON (1)

홍보하swu 2024. 5. 10. 11:26
파이썬 자료형
  1. 숫자형(number)
    • 사칙연산 (+, -, *, /)이 가능
    • a ** b or a ^ b: a를 b번 곱한 것
    • a // b: a를 b로 나눈 몫
    • a % b: a를 b로 나눈 나머지
  2. 문자형(string)
    • 여러 줄로 나타낼 때: \n or """문장""" or '''문장'''
    • 문자열 안에 ' 나 " 가 들어갈 때: 따옴표 앞에 \  or 전체 문장을 따옴표로 묶어주기
    • Q. “Failure is simply the opportunity to begin again.” he says.” 이 문장을 파이썬으로 표현하기
      • """ 사용
         print(""" "Failure is simply the opportunity to begin again." he says." """)
      • ' 사용
         print(' "Failure is simply the opportunity to begin again." he says." ')
      • \ 사용
         print('\"Failure is simply the opportunity to begin again.\" he says.\"')
    • 문자열 인덱싱 & 슬라이싱
      • indexing: 문자열의 위치를 인덱스(포지션) 값을 통해서 가져오는 방법
         print(a[0])
         print(a[-2])
      • slicing: 문자열을 분리하고 싶을 때 사용
         print(a[0:4])   # 0 <= a < 4
         print(a[0:5])   # 0 <= a < 5
         print(a[6:-1])   # 6 <= a < 마지막
      • Q. 문자열 ”TitanicJames” 를 영화제목(title)과 감독(director)으로 슬라이싱 하기
         a="TitanicJames"

         title=a[:7]
         director=a[7:]
         print('title:',title,',director:',director)
    • 문자열 포맷팅
      • 방법 1) format
         name='yj'
         age=24
         
         # 괄호 개수 = format 함수의 인수 개수
         print('안녕! 내이름은 {}, 나이는 {}.'.format(name,age))
      • 방법 2) f-string
         # format할 문자열이 많아질 때 용이
         name='yj'
         age=24
         city='seoul'

         print(f'이름은 {name}, 나이는 {age}, 사는 곳은 {city}')
    • 문자열 함수
      • strip()
         a='     python     '
         a.strip()  # 앞뒤 공백 제거
      • join()
         words=['안녕','하세요','파이썬']
         result="-".join(words)
         result   # 출력: "안녕-하세요-파이썬"
      • split()
         sentence = "파이썬은 쉬워요"
         sentence.split(" "# 출력: ['파이썬은', '쉬워요']
      • Q. 문자열 '10kg-20kg-30kg'에서 숫자형 데이터만 불러오기
         # 방법 1) 수가 하나씩 출력
         res=sample.split('-')
         res[0][:2]
         # res[1][:2]
         # res[2][:2]

         # 방법 2) kg-를 기준으로 문자열 분리
         resmaple=sample+'-'
         resmaple.split('kg-')
        ['10', '20', '30', '']
  3. 리스트형(list)
    • 리스트형도 사칙연산 가능
    • 리스트 인덱싱 & 슬라이싱
       x=['a','b','c','d','e']
       x[:3]
      ['a', 'b', 'c']
       x=['a','b','c',['d','e']]
       x[-1][-1]
      'e'
    • 리스트 함수
      • append()
        fruits=['사과','오렌지','체리']
        fruits.append('바나나')   # 리스트 데이터에 값을 추가
        fruits
        ['사과', '오렌지', '체리', '바나나']
      • pop()
        fruits.pop(2)  # fruits에서 인덱스가 2인 데이터를 리턴 후 삭제
        '체리'
        fruits
        ['사과', '오렌지', '바나나']
      • sort()
        numbers=[100,30,1000,300,10000]
        numbers.sort()    # 리스트 안의 데이터 값을 오름차순 정렬(default)
        numbers
        [30, 100, 300, 1000, 10000]
        numbers.sort(reverse=True)    # 내림차순 정렬
        numbers
        [10000, 1000, 300, 100, 30]​
  4. 튜플형(tuple) 
    • 튜플형도 리스트형처럼 인덱싱&슬라이싱과 사칙연산 가능
    • 튜플의 특징
      • 번 생성되면 변경이 불가능
      • 변경 불가능=처음 만들어진 튜플 요소에 추가, 삭제, 변경 X
        t=(1,2,3)
        # t[0]=100 # 값을 수정 => TypeError
        # t.append(4) # 값을 추가 => AttributeError
      • 러한 불변성이 리스트와 튜플의 가장 큰 차이점
      • 튜플을 썼다...? = "데이터가 변경되어선 안되는 작업을 했구나"
      • api_key 또는 중요한 변수들 또는 변하지않는 변수(상수변수)에 사용
    •  원본 데이터를 유지하면서 새로운 컬럼을 추가하고 싶을 땐?
      new_t= t+(4,)
      new_t
      (1, 2, 3, 4)​
  5. 딕셔너리형(dict)
    • 중괄호 안에 key와 value로 구성되어있는 형태
      • 단 key는 중복 불가능
    • 딕셔너리 함수
      • get()
        x = {'name':'inseop', 'age': [30, 32], 'city':{'born':'busan', 'live':'seoul'}}
        x.get('ages',0)    # 지정된 키의 값을 반환 / 키가 존재하지 않을 경우, 기본값을 반환
        0
        ### get()함수의 작동과정
        try:
            x['ages']
        except:
            print("오류 발생")
            x['ages'] = 0

        x['ages']
        오류 발생
        0
      • keys()
        x.keys()   # 딕셔너리의 모든 키를 리스트로 반환
        dict_keys(['name', 'age', 'city', 'ages'])
        list(x.keys())
        ['name', 'age', 'city', 'ages']
      • values()
        x.values()    # 딕셔너리의 모든 값을 리스트로 반환
        dict_values(['inseop', [30, 32], {'born': 'busan', 'live': 'seoul'}, 0])
  6. 집합형(set)
    • set의 특징
      • 순서가 없고, 인덱스도 없다.
      • 데이터의 중복을 허용하지 않는다.
        x=set([2,2,2,2,3,3,1,1,1])
        x
        {1, 2, 3}​
  7. 불형(boolean)
    • True = 1
    • False = 0

 

제어문
  1. if (조건문)
    • if문 작동원리
    • Q. 서울에서 부산을 간다는 가정하에 돈에 따른 조건문 (7만원 있으면 비행기, 5만원 있으면 기차, 3만원 있으면 버스, 그마저 없으면 걸어감)
      money=int(input("얼마가 있으신가요?"))
      if money>=70000:
        print("비행기 타고 가자")
      elif money>=50000:
        print("기차 타고 가자")
      elif money>=30000:
        print("버스 타고 가자")
      else:
        print("걸어가자")
      얼마가 있으신가요?40000
      버스 타고 가자
  2. for (반복문)
    • for문과 if문 혼합 사용
      cities=['seoul','daejeon','daegu','busan']

      for city in cities:
        print(f'도시 이름: {city}')
        if city == 'daejeon':
          print('go to 성심당')
        elif city=='busan':
          print('go to 해운대')
      도시 이름: seoul
      도시 이름: daejeon
      go to 성심당
      도시 이름: daegu
      도시 이름: busan
      go to 해운대
    • Q. 1~5까지 더하는 프로그램 만들기
      # 단, 결과값은 sum 변수에 담으시오.

      sum=0

      for i in range(1,6):
        sum+=i

      print(sum)
      15
  3. while (반복문)
    • Q. 1~5까지 더하는 프로그램 만들기
      i=0
      sum=0

      while i<5:
        i+=1
        sum+=i

      print(sum)
      15
  4. try-except (예외처리)
    • 보통의 프로그램에서는 오류가 나면 프로그램이 종료됨
    • 유저가 잘못된 입력을 해도 코드가 돌아가게 만들려면?
    • 문제가 생길 수 밖에 없는 코드에 사용
      try:
        word=int(input('숫자를 입력해주세요: '))
      except:   # 예외 처리
        word=0

      if word<100:
        print('100보다 작습니다.')
      숫자를 입력해주세요: ㅋㅋㅋㅋ
      100보다 작습니다.
      try:
        num=int(input('숫자를 입력해주세요: '))
        result=100/num
        print(f'결과값: {result}')

      except ValueError:
        # int() 변환에 실패한 경우 발생
        print('숫자가 아닙니다. 문자가 아닌 숫자를 입력하세요')

      except ZeroDivisionError:
        # 숫자를 0으로 나누려고 한 경우 발생
        print('0이 아닌 다른 숫자를 입력하세요')

      except Exception as e:
        # 위의 두 오류가 아닌 경우
        print(f'오류 문구: {e}')

      finally:
        print('계산이 완료되었습니다.')   # try-exception 구문이 끝나고 실행됨
      숫자를 입력해주세요: 0
      0이 아닌 다른 숫자를 입력하세요
      계산이 완료되었습니다.

 

제어문 실습 문제

Q1. 1부터 10까지의 정수 중에서 짝수만 출력하는 코드를 작성하세요.

for i in range(2,11,2):
  print(i)
2
4
6
8
10

 

Q2. 사용자로부터 입력받은 숫자가 양수인지 음수인지 출력하는 코드를 작성하세요.

n=int(input("숫자를 입력하시오:"))

if n>0:
  print('양수')
elif n<0:
  print('음수')
else:
  print('0')
숫자를 입력하시오:-2
음수

 

Q3. 1부터 100까지의 정수 중에서 3의 배수이면서 5의 배수인 정수의 합을 구하는 코드를 작성하세요.

sum=0

for i in range(1,101):
  if i%15==0:
    sum+=i
print(sum)
315

 

Q4. 사용자로부터 n개의 정수를 입력받아, 이 중에서 가장 큰 값과 가장 작은 값을 구하는 코드를 작성하세요.

numbers=input("숫자들을 입력하시오(띄어쓰기로 구분):")
n_list=numbers.split()
int_n_list=[int(i) for i in n_list]   ## 기억해두기!!
print('가장 큰 값:',max(int_n_list))
print('가장 작은 값:',min(int_n_list))
숫자들을 입력하시오(띄어쓰기로 구분):12 8 55 78 -5
가장 큰 값: 78
가장 작은 값: -5
# 다른 방법

num = int(input("몇 개의 정수를 입력하시겠습니까?"))

user_input_list = []

for i in range(num):
    user_input = int(input(f"숫자를 입력하시오 ({i+1}번째 숫자)"))
    user_input_list.append(user_input)

min_val = user_input_list[0]
max_val = user_input_list[0]

for i in user_input_list:
    if i < min_val:
        min_val = i

    if i > max_val:
      max_val=i

print(f'최대값: {max_val}')
print(f'최소값: {min_val}')
몇 개의 정수를 입력하시겠습니까?3
숫자를 입력하시오 (1번째 숫자)18
숫자를 입력하시오 (2번째 숫자)45
숫자를 입력하시오 (3번째 숫자)3
최대값: 45
최소값: 3

 

Q5. 사용자로부터 입력받은 숫자의 구구단을 출력하는 코드를 작성하세요.

n=int(input("숫자를 입력하시오:"))

for i in range(1,10):
  print(n,"곱하기",i,"는", n*i)
숫자를 입력하시오:3
3 곱하기 1 는 3
3 곱하기 2 는 6
3 곱하기 3 는 9
3 곱하기 4 는 12
3 곱하기 5 는 15
3 곱하기 6 는 18
3 곱하기 7 는 21
3 곱하기 8 는 24
3 곱하기 9 는 27

 

 

함수
  • def = define 정의하다.
  • 프로그래밍 중 반복적으로 생성되는 코드들을 재활용하여 사용하고 싶을 때 사용
  • 호출을 할 때만 실행이 되는 일련의 코드 블록을 의미
  • 함수의 구조

  • 파이썬 내장함수 / 외장함수
    • 내장함수 (Built-in Function): https://docs.python.org/3/library/functions.html
    • 외장함수 (Extenal Function)
      ■  import문을 통해 외부의 라이브러리에서 가져온 함수
      ■  외장 함수 사용법
      import <모듈이름>

 

함수 실습 문제

Q1. 두 수의 곱 반환 함수 두 수를 인자로 받아 그 곱을 반환하는 함수 multiply_numbers를 작성하십시오.

함수를 작성한 후, 두 수 4와 5를 입력하여 결과를 출력하는 코드를 작성하십시오.

def multiply_numbers(a,b):
  return a*b

multiply_numbers(4,5)
20​

 

Q2. 리스트의 평균값 계산 함수 숫자들이 담긴 리스트를 인자로 받아, 리스트의 평균값을 반환하는 함수 calculate_average를 작성하십시오.

함수를 작성한 후, 리스트 [10, 20, 30, 40, 50]에 대해 평균값을 출력하는 코드를 작성하십시오.

def calculate_average(a):
  sum=0
  for i in a:
    sum+=i
  return sum/len(a)

calculate_average([10, 20, 30, 40, 50])
30.0​
# 더 쉬운 방법
## 리스트는 사칙연산 가능
def calculate_average(nums):
  return sum(nums)/len(nums)

 

Q3. 문자열 반대로 뒤집기 함수 문자열을 인자로 받아, 그 문자열을 반대로 뒤집은 결과를 반환하는 함수 reverse_string를 작성하십시오.

함수를 작성한 후, 문자열 "hello"를 뒤집어 출력하는 코드를 작성하십시오.

# 방법 1
def reverse_string(a):
  return a[::-1]    # 역으로 출력하는 방법 -> 기억해두기

reverse_string("hello")
'olleh'
# 방법 2
def reverse_string(a):
  result=''
  for i in a:
    result=i+result  # 'p' -> 'yp' -> 'typ' ... -> 'nohtyp'
  return result

reverse_string("python")
'nohtyp'

 

Q4. 나이에 따른 할인율 계산 함수 작성 고객의 나이에 따라 할인율을 계산하는 함수 calculate_discount_rate를 작성하십시오. 할인율은 다음과 같이 결정됩니다:

  • 3세 이하의 어린이는 100% 할인(무료)
  • 4세부터 12세까지는 50% 할인
  • 13세부터 18세까지는 25% 할인
  • 19세 이상은 할인 없음
def calculate_discount_rate(age):
  d_rate=0
  if age<=3:
    d_rate=1
  elif age<=12:
    d_rate=0.5
  elif age<=18:
    d_rate=0.25
  else:
    d_rate=0

  print(f'당신의 나이는 {age}, 할인율은 {int(d_rate*100)}% 입니다.')
  return d_rate

calculate_discount_rate(15)
당신의 나이는 15, 할인율은 25% 입니다.
0.25

 

 

클래스
  • 클래스: 객체지향 프로그래밍의 가장 기본 단위
  • 하나의 틀과 같은 역할을 하며, 데이터 저장도 가능
  • 함수는 특정 기능을 수행하는 일련의 코드블록을 나타내고 / 클래스는 함수보다 더 큰 개념. 함수를 여러개 모아놓은 것
  • 클래스 내에 정의되는 변수 속성, 함수 메소드라고 부른다.
  • Q. 팥을 넣으면 팥붕어빵, 슈크림 넣으면 슈크림 붕어빵을 만들어내는 틀 정의
    class FishBread:
      def readbean_bread(self):   # class안의 함수(메서드)들은 반드시 인자로 self를 필요로 함.
        print('팥붕')

      def sucream_bread(self):
        print('슈붕')

    a=FishBread()    # class 호출
    a.readbean_bread()     # class 내 함수(메소드)에 접근
    팥붕
    a.sucream_bread()
    슈붕
  • Q. 차의 정보를 보여주는 클래스 정의
    class Car:
      def __init__(self, make, model):  # 초기화 함수, 클래스에 반드시 필요한 메서드
          self.make=make    # 초기화 함수 안의 변수 값 = 속성
          self.model=model
          self.fuel=0

      def display_info(self):   # 차량의 정보를 보여주는 함수
          ## 클래스 안에선 self 인자를 통해 다른 함수에서도 변수 사용 가능
          print(f'제조사: {self.make}, 모델: {self.model}, 연료:{self.fuel}')

      def add_fuel(self,amount):    # 연료를 추가하는 함수
          self.fuel+=amount
          print(f'주입 연료량: {amount} 현재 연료량: {self.fuel}')
     
    my_car=Car('Hyundai','Genesis')
    my_car.display_info()
    제조사: Hyundai, 모델: Genesis, 연료:0
    my_car.add_fuel(100)
    주입 연료량: 100 현재 연료량: 100
    print(my_car.model)
    print(my_car.make)
    Genesis
    Hyundai