*agrs, *kwargs
파이썬에서 여러 개의 인자를 한꺼번에 받을 때 사용하는 문법
def greet(message, *names):
for name in names:
print(f"{message}, {name}!")
greet("Hello", "Alice", "Bob", "Charlie")
'''
출력결과:
Hello, Alice!
Hello, Bob!
Hello, Charlie!
'''
첫 번째 인자인 "Hello"는 message에 저장하고, 나머지는 names에 튜플로 저장한다.
def multiply(a, b, c):
return a * b * c
numbers = [2, 3, 4]
result = multiply(*numbers)
print(result)
'''
출력결과:
24
'''
*numbers는 [2,3,4] 리스트의 요소를 각각 a,b,c에 전달
def example_function(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
example_function(1, 2, 3, name = "Alice", age = 25)
'''
출력결과:
args: (1, 2, 3)
kwargs: {'name': 'Alice', 'age': 25}
args는 튜플, kwargs는 딕셔너리
'''
args는 여러 개의 위치 인자를 받을때 사용
args는 튜플 형태로 저장됨
리스트 언패킹(리스트)에도 사용 가능
kwargs와 함께 사용 가능(kwargs는 딕셔너리)
람다함수 사용예시
(1) sort()와 함께 사용: 리스트 정렬할 때
students = [("철수", 90),("영희", 80),("민수",95)]
students.sort(key=lambda x: x[1],reverse=True)
print(students)
'''
출력결과:
[('민수', 95), ('철수', 90), ('영희', 80)]
'''
(2) map()과 함께 사용: 리스트의 모든 값 변환
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared)
'''
출력결과:
[1, 4, 9, 16, 25]
'''
(3) filter()와 함께 사용: 특정 조건만 남기기
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)
'''
출력:
[2, 4, 6]
'''
Pythond의 주요 라이브러리
- 참고할만한 글
Numpy
np.array: 리스트나 튜플을 사용해 배열을 생성
np.zeros: 모든 원소를 0으로 초기화한 배열 생성
np.ones: 모든 원소를 1로 초기화한 배열 생성
np.arrange: 일정한 간격으로 값을 생성하여 배열로 반환
인덱싱: 특정 위치의 요소에 접근
슬라이싱: 범위를 지정하여 부분 배열 추출 / 다차원 배열에서도 슬라이싱 가능
산술 연산: 배열 간의 기본 연산 가능
broadcasting: 서로 다른 크기의 배열 간에도 연산이 가능하도록 자동으로 크기를 맞춰줌
기본 통계 함수: data=np.array(리스트)인 경우 data.mean(), data.sum(), data.max(), data.min() 등
축(axis)을 기준으로 계산: axis=0인 경우 열 기준, axis = 1인 경우 행 기준
Pandas
pd.Series(): 1차원 데이터 구조, 인덱스와 값으로 구성
pd.DataFrame: 여러 Series가 결합된 2차원 데이터 구조, 표 형태의 데이터를 다룰 때 사용
csv 파일 읽기: pd.read_csv('data.csv')
csv 파일 쓰기: df.to_csv('output.csv', index = False)
컬럼 선택 및 필터링
결측치 처리(fillna, dropna)
그룹화 및 집계(groupby, sum, mean, count) *여러 개의 집계 함수 사용하는 경우 agg()
Matplotlib & Seaborn
Matplotlib
선 그래프 그리기 plt.plot(x,y)
막대 그래프 그리기 plt.bar(categories, values)
축 레이블 및 제목 설정 plt.title(), plt.xlabel(), plt.ylabel()
Seaborn (Matplotlib 위에서 동작)
히스토그램 sns.histplot(data = tips, x= 'total_bills', bins = 10)
상자그림 sns.boxplot(data = tips, day = 'day', y = 'total_bill')
막대그래프 sns.barplot(x='day', y='total_bill', data = tips)
산점도 sns.scatterplot(data=tips, x='total_bill', y = 'tip', hue = 'time') *hue: 데이터를 그룹별로 나눠 색상을 다르게 표시
스타일 적용 sns.set_stype('whitegrid')
색상 및 옵션 활용
데이터 전처리 및 탐색
데이터 전처리 기법: 정규화 / 표준화 / 이상치 처리
결측치 처리 및 이상치 탐지
## 결측치 처리
df = pd.read_csv('data.csv')
print(df.isnull().sum())
# 삭제
df = df.dropna()
# 대체
df['Age'] = df['Age'].fillna(df['Age'].mean())
## 이상치 탐지
Q1 = df['Age'].quantile(0.25)
Q3 = df['Age'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['Age'] < lower_bound)|df['Age'] > upper_bound]
데이터 요약 통계 확인
## 데이터 구조 및 정보 확인
print(df.info()) # 데이터 타입 및 결측치 확인
print(df.shape) # 행과 열의 개수 출력
print(df.head()) # 상위 5개 행 출력
## 요약통계 확인
print(df.describe()) # 수치형 컬럼만 (평균, 표준편차, 최소/최대값 등을 확인)
print(df['Age'].mean()) # 평균값 계산
print(df['Salary'].max()) # 최대값 계산
정규화
## 사이킷런 활용
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
df = pd.read_csv('data.csv')
scaler = MinMaxScaler()
df[['Normalized_Age']] = scaler.fit_transform(df[['Age']])
표준화
import pands as pd
from sklearn.preprocessing import StandardScaler
df = pd.read_csv('data.csv')
scaler = StandardScaler()
df[['Standardized_Age']] = scaler.fit_transform(df[['Age']])
데이터 분석 모델 이해 (선형모델 중심)
머신러닝의 기본 개념: 지도학습 / 비지도 학습
scikit-learn으로 선형 회귀 구현
## 데이터 준비와 분리
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
X = df[['Size']] # 집 크기
y = df['Price'] # 집 가격
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 1234)
## 선형 회귀 모델을 학습
from sklearn.linear_model import LinearRegression
model = LinearRregression()
model.fit(X_train, y_train)
print("기울기:", model.coef_[0])
print("y절편:", model.intercept_)
## 예측 및 평가(학습된 모델로 테스트 데이터를 예측하고 성능을 평가)
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
y_pred = model.predict(X_test) # 테스트 데이터로 예측
mse = mean_squared_error(y_test, y_pred) # 모델 평가(평균제곱오차 MSE)
print("평균 제곱 오차(MSE):", mse)
r2 = r2_score(y_test, y_pred) # 모델 평가(결정계수 R-Squared)
print("R2 score:", r2)
#model_linear.score(X_test, y_test)와 동일한 값이 나온 것을 확인할 수 있다.
## 결과 확인
print("실제값:", list(y_test))
print("예측값:", list(y_pred))
Decorator란?
decorator는 함수나 메서드의 기능을 수정하거나 확장하는 도구
간단한 예제
def my_decorator(func):
def wrapper():
print("함수 실행 전") # 실행 전 작업
func() # 원래 함수 실행
print("함수 실행 후") # 실행 후 작업
return wrapper
@my_decorator
def hello():
print("Hello, Python!")
hello()
'''
출력결과:
함수 실행 전
Hello, Python!
함수 실행 후
'''
인자를 받는 함수에 대한 Decorator
def my_decorator(func):
def wrapper(*args, **kwargs):
print("함수 실행 전") # 실행 전 작업
result = func(*args, **kwargs) # 인자 전달과 원래 함수 실행
print("함수 실행 후") # 실행 후 작업
return result
return wrapper
@my_decorator
def add(a, b):
return a + b
print(add(3, 5))
'''
출력결과:
함수 실행 전
함수 실행 후
8
'''
실행 시간 측정 Decorator
import time
def timer(func):
def wrapper(*args, **kwargs):
start = time.time() # 함수 시작 시간 기록
result = func(*args, **kwargs) # 원래 함수 실행
end = time.time() # 함수 종료 시간 기록
print(f"실행 시간: {end - start:.4f}초") # 실행 시간 출력
return result # 결과 반환
return wrapper
@timer
def slow_function():
time.sleep(2) # 2초간 대기
print("작업 완료!")
slow_function()
'''
출력결과:
작업 완료!
실행 시간: 2.0003초
'''
로그인 검증 Decorator
def require_login(func):
def wrapper(user):
if user.get("is_logged_in"): # 로그인 상태 확인
return func(user) # 로그인 되어 있으면 원래 함수 실행
else:
print("로그인이 필요합니다.") # 로그인 안 되어 있으면 메시지 출력
return wrapper
@require_login
def dashboard(user):
print(f"{user['name']}님의 대시보드입니다.")
user1 = {"name": "Alice", "is_logged_in": True}
user2 = {"name": "Bob", "is_logged_in": False}
dashboard(user1) # 정상 실행
dashboard(user2) # 로그인 필요 메시지 출력
'''
출력결과:
Alice님의 대시보드입니다.
로그인이 필요합니다.
'''
'k-digital training' 카테고리의 다른 글
20250206_python (0) | 2025.02.06 |
---|---|
20250205_LLM 심화 이해 및 활용 (0) | 2025.02.05 |
250204_생성형AI-LLM 기본 개념, 기본 이해 및 활용 (0) | 2025.02.04 |
250203_OT,개발환경설정 (0) | 2025.02.03 |