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와 함께..