TIL

[멋쟁이사자처럼 부트캠프 그로스 마케팅] 데이터 분석 개론 : 파이썬

•ɞ• 2025. 2. 9. 23:46

학습 목표

  • Python 기본 문법 이해
  • Python 제어문(조건문) 실습
  • Python 데이터 구조 실습
  • Python 함수, 클래스, 모듈과 패키지 실습

1. Python Grammer

1) Variable

# 정수형 변수
integer_var = 100
print(type(integer_var))  # 출력: <class 'int'>

# 실수형 변수
float_var = 25.4
print(type(float_var))  # 출력: <class 'float'>

# 문자열 변수
string_var = "Python"
print(type(string_var))  # 출력: <class 'str'>

# 불리언 변수
bool_var = True
print(type(bool_var))  # 출력: <class 'bool'>

 

2) Builit in Data type

# Numeric
int_num = 42 #정수
float_num = 3.14 #실수
complex_num = 1 + 2j #복소수

# Sequence
string_val = "Python is fun" #문자열
list_val = [1, 2, 3, 4, 5] #리스트 (순서o 변경o)
tuple_val = (1, 2, 3, 4, 5) #튜플 (순서o 변경x)

# Set
set_val = {1, 2, 3, 4, 5} #세트 (순서x 중복x)
set_val.add(6)

# Mapping
dict_val = {"name": "Alice", "age": 30} #딕셔너리 (key-value)

# Boolean
is_open = True #True or False
is_closed = False

# None
none_val = None

 

2. Conditional Statements

 

예제 2: 짝수와 홀수 판별

number = 7

if number % 2 == 0: # %: 나머지 //: 몫
    print(f"{number}는 짝수입니다.") # f-string: 문자열 안에 {변수} 삽입
else:
    print(f"{number}는 홀수입니다.")

 

#5. ROAS (광고 수익률) 분석

# 변수 설정
ad_spend = 800000  # 광고비 (원)
revenue = 4000000  # 광고를 통해 발생한 매출 (원)

# ROAS 계산 및 평가
if ad_spend > 0:
    roas = (revenue / ad_spend) * 100
    print(f"ROAS: {roas:.2f}%") # 2f: 소수점 둘째 자리까지 출력

    if roas >= 400:
        print("ROAS가 우수합니다. 광고 전략을 유지하세요.")
    elif 200 <= roas < 400:
        print("ROAS가 평균 수준입니다. 개선할 여지가 있습니다.")
    else:
        print("ROAS가 낮습니다. 광고 전략을 조정하세요.")
else:
    print("광고비가 0원이므로 ROAS를 계산할 수 없습니다.")

 

3. Python Data Structure

1) List [ ]

  • 리스트 생성 및 요소 접근
# 리스트 생성
campaigns = ["봄맞이 할인", "여름 세일", "가을 이벤트", "겨울 프로모션"]

# 리스트 인덱스 사용
print(campaigns[0])  # '봄맞이 할인'
print(campaigns[-1]) # '겨울 프로모션' (음수 인덱스는 뒤에서부터)

 

  • 리스트 요소 수정 및 추가
# 리스트 요소 변경
campaigns[1] = "여름 할인"
print(campaigns)  # ['봄맞이 할인', '여름 할인', '가을 이벤트', '겨울 프로모션']

# 리스트에 새로운 요소 추가 .append
campaigns.append("봄 시즌 프로모션")
print(campaigns)  # ['봄맞이 할인', '여름 할인', '가을 이벤트', '겨울 프로모션', '봄 시즌 프로모션']

 

  • 리스트 삭제
# 특정 요소 삭제
del campaigns[2]  # '가을 이벤트' 삭제
print(campaigns)  # ['봄맞이 할인', '여름 할인', '겨울 프로모션', '봄 시즌 프로모션']

# 리스트 전체 삭제 .clear
campaigns.clear()
print(campaigns)  # []

 

  • 리스트 for 반복문
# 리스트의 각 요소 출력
for campaign in campaigns:
    print(f"캠페인: {campaign}")

 

  • 리스트 슬라이싱
# 리스트 일부 가져오기
print(campaigns[1:3])  # 인덱스 1부터 3 이전까지의 요소 가져오기 => ['여름 할인', '겨울 프로모션']

 

2) Tuple ( )

# 튜플 생성
marketing_channels = ("Google Ads", "Facebook Ads", "Email Marketing")

# 요소 접근
print(marketing_channels[0])  # 'Google Ads'
print(marketing_channels[-1]) # 'Email Marketing'

# 튜플은 수정할 수 없음
marketing_channels[0] = "TikTok Ads"  # TypeError

 

3) Dictionary { }

  • 딕셔너리 생성 및 요소 접근
# 딕셔너리 생성
campaign_performance = {
    "봄맞이 할인": {"CTR": 0.12, "CR": 0.05},
    "여름 세일": {"CTR": 0.15, "CR": 0.07},
    "가을 이벤트": {"CTR": 0.08, "CR": 0.03}
}

# 특정 키의 값 조회
print(campaign_performance["봄맞이 할인"])  # {'CTR': 0.12, 'CR': 0.05}
print(campaign_performance["봄맞이 할인"]["CTR"])  # 출력: 0.12

 

  • 딕셔너리 요소 추가 및 수정
# 새로운 캠페인 데이터 추가
campaign_performance["겨울 프로모션"] = {"CTR": 0.10, "CR": 0.06}

# 기존 캠페인 데이터 수정
campaign_performance["봄맞이 할인"]["CTR"] = 0.13

 

  • 딕셔너리 for 반복문
for campaign, metrics in campaign_performance.items():
    print(f"{campaign}: 클릭률 {metrics['CTR']}, 전환율 {metrics['CR']}")

# 봄맞이 할인: 클릭률 0.12, 전환율 0.05
# 여름 세일: 클릭률 0.15, 전환율 0.07
# 가을 이벤트: 클릭률 0.08, 전환율 0.03

 

4) Set { }

# 집합 생성
active_users = {"user1", "user2", "user3"}
new_users = {"user2", "user3", "user4", "user5"}

# 합집합 (Union) |
all_users = active_users | new_users  # {'user1', 'user2', 'user3', 'user4', 'user5'}

# 교집합 (Intersection) &
common_users = active_users & new_users  # {'user2', 'user3'}

 

4. Loops

1) for 반복문

: 시퀀스의 각 항목에 대한 반복

# 리스트/튜플의 각 항목 출력
fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
    print(fruit) # apple banana cherry
    
# 범위의 숫자 반복
for i in range(5):
	print(i) # 0 1 2 3 4
    
# 문자열의 각 문자 출력
word = "Python"
for letter in word:
    print(letter) # p y t h o n

# 딕셔너리의 키와 값 출력
student_scores = {"Sumi": 85, "Charls": 92, "Charlie": 78}
for student, score in student_scores.items():
    print(f"{student}: {score}")

 

2) while 반복문

: 조건문이 true일 동안 코드 반복

# 숫자 세기
count = 0
while count < 5:
    print(count)
    count += 1 # 0 1 2 3 4
    
# 사용자 입력에 따른 반복
response = ""
while response != "exit":
    response = input("종료하려면 'exit'를 입력하세요: ")
    print(f"당신의 입력: {response}")

 

3) 반복문 제어 키워드

  • break : 종료
  • continue : 건너뛰기
  • else : break로 종료되지 않았을 경우 = 반복문이 끝까지 정상 실행됨

예제 4: 피보나치 수열

a, b = 0, 1
while a < 100:
    print(a, end=' ') # end = '' : 한 줄로 출력 = print()
    a, b = b, a + b
print() # 0 1 1 2 3 5 8 13 21 34 55 89

 

예제 6: 중첩 반복문을 사용한 별 모양 출력

# 바깥쪽 반복문: 0부터 4까지 반복
for i in range(5):
    # 안쪽 반복문: 현재 i 값 + 1 만큼 '*' 출력
    for j in range(i + 1):
        print('*', end='')  # '*'를 출력하고 줄바꿈 없이 유지
    print()  # 안쪽 루프 종료 후 줄바꿈하여 다음 줄로 이동
# *
# **
# ***
# ****
# *****

 

예제 7: 반복문 in 리스트

numbers = [1, 2, 3, 4, 5]

squares = [n ** 2 for n in numbers]

print(squares) # [1, 4, 9, 16, 25]

 

예제 11: 무한 루프

# while True: 문에서 True는 항상 참(1)으로 평가되므로 루프가 계속 실행됨
while True:
    name = input("이름을 입력하세요 (종료하려면 'exit' 입력): ")

    if name == "exit":
        break

    print(f"안녕하세요, {name}!")

 

예제 15: 거꾸로 숫자 세기

for i in range(10, 0, -1): #10은 시작 값, 0은 종료 값(포함x), -1은 감소하는 간격
    print(i, end=' ')  # 10 9 8 7 6 5 4 3 2 1

 

5. Functions

def add(a, b): # a, b : 매개변수
    return a + b #결과를 반환하여 저장

result = add(3, 5) # 3, 5 : 인수
print(result)  # 출력: 8

 

def greet(name="Guest"): # name의 기본값 지정
    print(f"안녕하세요, {name}님!")

greet()       # 출력: 안녕하세요, Guest님!
# 기본값이 없으면 생략되거나 None
greet("Charls")  # 출력: 안녕하세요, Charls님!

 

* 가변 매개변수

# * : 인수 다수 받기
def add_all(*args): #모든 인수를 튜플 args에 저장
    total = 0
    for num in args:
        total += num
    return total

result = add_all(1, 2, 3, 4, 5)
print(result)  # 출력: 15

 

** 키워드 가변 매개변수

# ** : 키워드 인수(key:value) 받기
def print_kwargs(**kwargs): # 인수를 딕셔너리 kwargs에 저장
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name="Sumi", age=25, city="Seoul")

 

  • 람다 함수
add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

 

이때 add는 함수가 아니다!

람다 함수는 lamda 키워드를 사용해 정의된 함수, 즉 이름이 없는 함수.

위 예제의 경우 람다 함수를 변수 add에 할당하여 add를 함수처럼 동작할 수 있는 역할을 부여.

 

  • 재귀 함수
def factorial(n):
    if n == 1:
        return 1 # 종료 조건 필수
    else:
        return n * factorial(n - 1) # 함수 안에 자기 자신 포함

print(factorial(5))  # 출력: 120

 

6. Class

 class Person:
    def __init__(self, name, age):
# __init__ : 클래스 초기 속성 설정 메소드
# self : 인스턴스를 가리키는 참조 변수 (꼭 self여야 되는 건 아니지만 관습)
        self.name = name # 클래스의 name 속성에 __init__의 매개변수 name을 저장하겠다!
        self.age = age

    def greet(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}살입니다.")

# 인스턴스(객체) 생성
person1 = Person("Sumi", 30) # __init__ 메서드에 인수 전달
person2 = Person("Charls", 25)

# 인스턴스 변수 접근
print(person1.name, person2.age) # Sumi 30

# 메서드 호출
person1.greet()  # 출력: 안녕하세요, 제 이름은 Sumi이고, 나이는 30살입니다.
person2.greet()  # 출력: 안녕하세요, 제 이름은 Charls이고, 나이는 25살입니다.

 

  • 부모 클래스와 서브 클래스
class Animal: # 기본 클래스
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Cat(Animal): # 서브 클래스1
    def speak(self):
        return f"{self.name}가 야옹합니다."

class Dog(Animal): # 서브 클래스2
    def speak(self):
        return f"{self.name}가 멍멍합니다."

 

 

  • 클래스 메서드와 정적 메서드
  class MyClass:
    class_variable = "클래스 변수"

    def __init__(self, value):
        self.instance_variable = value

    @classmethod
    def class_method(cls):
        return cls.class_variable

    @staticmethod # cls, self와 독립적인 메서드
    def static_method():
        return "정적 메서드"

# 클래스 메서드 호출
print(MyClass.class_method())  # 출력: 클래스 변수

# 정적 메서드 호출
print(MyClass.static_method())  # 출력: 정적 메서드

 

 

  • 데이터 캡슐화 (Private Variable)
class EncapsulatedClass:
    def __init__(self, value):
        self.__hidden_variable = value  # __(언더바 두 개): 프라이빗 변수

    def get_hidden_variable(self): # get_: 프라이빗 변수 값을 가져옴
        return self.__hidden_variable

    def set_hidden_variable(self, value): #set_: 프라이빗 변수 값을 변경함
        self.__hidden_variable = value

# 인스턴스 생성
obj = EncapsulatedClass(10)

# 프라이빗 변수 접근
print(obj.get_hidden_variable())  # 출력: 10
obj.set_hidden_variable(20)
print(obj.get_hidden_variable())  # 출력: 20

# 직접 접근하면?
print(obj.__hidden_variable) # Error

 

7. Module & Package

 

# my_class.py 파일을 import
from my_class import MyClass # MyClass는 my_class.py 파일 속 클래스 이름

 

  • To Do list
  • 로또 번호 발생기
  • 궁합 계산

 


 

나의 스터디 파트너 gpt와 함께..