def
키워드를 사용하여 함수를 정의return
을 사용하여 결과값을 반환def 함수이름(매개변수1, 매개변수2, ...):
# 함수 내부에서 수행할 작업
return 결과값 # (선택적) 함수의 결과를 반환
결과 = 함수이름(인수1, 인수2, ...)
greet
라는 함수를 정의하여 함수를 호출하면 반환된 인사말을 출력# 함수 정의
def greet(name): # name: 매개변수
message = "Hello, " + name + "!"
return message
# 함수 호출
greeting = greet("Alice") # "Alice": 인수
print(greeting) # 출력: Hello, Alice!
def calculate_mean(numbers):
"""
주어진 숫자 리스트의 평균을 계산하는 함수
Parameters:
numbers (list of int or float): 평균을 계산할 숫자들의 리스트
Returns:
float: 주어진 숫자 리스트의 평균값
"""
total = sum(numbers)
mean = total / len(numbers)
return mean
# 함수 호출 및 예시
data = [10, 20, 30, 40, 50]
average = calculate_mean(data)
print("평균:", average)
calculate_mean
이라는 함수를 정의하여 주어진 숫자 리스트의 평균을 계산def find_max(numbers):
max_num = numbers[0]
for num in numbers:
if num > max_num:
max_num = num
return max_num
# 함수 호출
print(find_max([3, 7, 2, 9, 5])) # 출력: 9
def multiply_tuple(tup):
result = 1
for num in tup:
result *= num
return result
# 함수 호출
print(multiply_tuple((2, 3, 4))) # 출력: 24
def char_frequency(string):
freq_dict = {}
for char in string:
if char in freq_dict:
freq_dict[char] += 1
else:
freq_dict[char] = 1
return freq_dict
# 함수 호출
print(char_frequency("hello")) # 출력: {'h': 1, 'e': 1, 'l': 2, 'o': 1}
# 전역변수 예시
global_var = 10
def global_example():
print("전역변수 접근:", global_var)
global_example() # 출력: 전역변수 접근: 10
# 지역변수 예시
def local_example():
local_var = 20
print("지역변수 접근:", local_var)
local_example() # 출력: 지역변수 접근: 20
# 함수 내에서 전역변수를 수정하는 예시 ★
def modify_global():
global global_var
global_var = 30
print("함수 내에서 수정된 전역변수:", global_var)
modify_global() # 출력: 함수 내에서 수정된 전역변수: 30
print("수정된 전역변수 확인:", global_var) # 출력: 수정된 전역변수 확인: 30
global_var
는 전역변수local_var
는 함수 local_example()
내에서만 접근 가능한 지역변수global
키워드를 사용하여 전역변수를 수정할 수 있음global 키워드를 안 쓰면 어떻게 될까?
global_var = 10 def modify_global(): global_var = 30 print("함수 내에서 수정된 전역변수:", global_var) modify_global() # 출력: 함수 내에서 수정된 전역변수: 30 print("수정된 전역변수 확인:", global_var) # 출력: 수정된 전역변수 확인: 10
global 키워드 문법 사용하지 않으면 전역변수 수정 안 됨
함수 내부적으로 30을 출력했을 뿐
함수 내부에 있는 global_var는 진짜 전역변수가 아니라 이름만 같은 지역변수임 → 값 변화시켜도 전역변수에 영향 없음
# 매개변수(parameter) 예시
def greet(name): # 여기서 'name'은 매개변수입니다.
print("Hello, " + name + "!")
# 함수 호출할 때 전달되는 값이 인수(argument)입니다.
greet("Alice") # 함수 호출 시 "Alice"는 greet 함수의 매개변수 'name'에 전달됩니다.
greet
함수의 매개변수는 name
"Alice"
라는 값이 name
매개변수로 전달되는데, 여기서 "Alice"
가 인수에 해당def add_numbers(x, y): # 'x'와 'y'는 매개변수입니다.
result = x + y
return result
# 함수 호출 시 10과 20이 각각 'x'와 'y' 매개변수에 전달됩니다.
sum_result = add_numbers(10, 20) # 10과 20이 전달인자(Argument; 인수)입니다.
print("Sum:", sum_result) # 출력: Sum: 30
add_numbers
함수의 매개변수는 x
와 y
10
과 20
이 각각 x
와 y
매개변수로 전달되는데, 이 10
과 20
이 각각 인수에 해당def greet(name, age):
print("안녕하세요", name, "님! 나이는 ", age, "세입니다.")
# 위치 전달인자 사용
greet("철수", 30) # 출력: 안녕하세요, 철수님! 나이는 30세입니다.
name
매개변수에, 30이 age
매개변수에 순서대로 전달def greet(name, age):
print("이름:", name)
print("나이:", age)
# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)
name
과 age
두 개의 매개변수를 가짐def greet(name="Guest", age=25):
print("이름:", name)
print("나이:", age)
# 기본값이 설정된 함수 호출
greet()
greet
함수의 매개변수인 name
과 age
는 각각 "Guest"
와 25
의 기본값을 가집니다. def greet(name="Guest", age=25):
print("이름:", name)
print("나이:", age)
# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)
# 일부 매개변수에만 키워드 인수 사용하여 호출
greet(name="Bob")
greet
함수를 호출할 때 키워드 인수를 사용하여 name
과 age
에 값을 전달*args
와 **kwargs
를 사용*args
(arguments): 함수를 호출할 때 임의의 개수의 위치 인수를 전달할 수 있도록 함**kwargs
(keyword argument): 함수를 호출할 때 임의의 개수의 키워드 인수를 전달할 수 있도록 함def sum_values(*args):
total = 0
for num in args:
total += num
return total
result = sum_values(1, 2, 3, 4, 5)
print("합계:", result) # 출력: 합계: 15
sum_values
는 임의의 개수의 위치 인수를 받아서 그 합계를 계산args
라는 튜플로 위치 인수들을 받아 처리def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, country="USA")
print_info
함수는 임의의 개수의 키워드 인수를 받아서 그 정보를 출력
함수 내에서는 kwargs
라는 딕셔너리로 키워드 인수들을 받아 처리
우리가 사용하는 함수 중에서도 kwargs가 있음
# 1번
print("안녕하세요, 파이썬 재미있나요?")
print("네, 정말 재미있습니다.")
# 2번
print("안녕하세요, 파이썬 재미있나요?", end="(사실 재미없어요...)")
print("네, 정말 재미있습니다.")
'''
1번 출력:
안녕하세요, 파이썬 재미있나요?
네, 정말 재미있습니다.
→ 파라미터에 기본값이 \n(개행문자)로 되어있음
2번 출력:
안녕하세요, 파이썬 재미있나요?(사실 재미없어요...)네, 정말 재미있습니다.
'''
요약:
- *변수: 여러 개가 argument로 들어올 때 함수 내부에서 해당 변수를 튜플로 처리
- **변수:
keyword=''
로 입력할 경우 그걸 각각 key와 value로 가져오는 딕셔너리로 처리- 함수의 파라미터 순서
- 일반변수 → *변수 → **변수
def stadardization(data):
# 데이터 표준화 함수
scaled_data = (data - data.mean()) / data.std()
return scaled_data
def impute_missing_values(data):
# 결측치 처리 함수
filled_data = data.fillna(data.mean())
return filled_data
def nomalization(data):
# 데이터 정규화 함수
scaled_data = (data - data.min()) / (data.max() - data.min())
return scaled_data
정규화(Normalzation), 표준화(Standardization), 결측값(Missing Values)에 대한 부가 설명
- 정규화(Normalization)
- 데이터를 일정한 범위로 변환하여 비교나 분석을 용이하게 하는 과정
- 주로 0과 1 사이의 값으로 변환하거나 -1과 1 사이의 값으로 변환하는 등의 방법 사용
- 표준화(Standardization)
- 데이터의 평균을 0으로, 표준편차를 1로 만들어주는 데이터 전처리 과정
- 주로 데이터의 분포를 정규분포로 만들거나, 특성 간의 스케일을 일치시키기 위해 사용
- 일부 머신러닝 알고리즘에서 가정하는 가우시안 분포를 만족시키는 데 도움이 됨
- 결측값(Missing Values)
- 데이터에서 측정되지 않거나 없는 값을 의미
- 데이터 수집 과정에서 발생할 수 있거나, 처리 과정에서 발생할 수 있음
- 분석이나 모델링 과정에서 문제를 일으킬 수 있으며, 이를 처리하는 방법이 중요
- 데이터 전처리 과정에서 결측값을 채우거나, 해당 행이나 열을 삭제하여 처리하거나, 평균이나 중앙값으로 결측값을 대체하는 등의 방법을 사용
import matplotlib.pyplot as plt
def plot_histogram(data):
# 히스토그램을 그리는 함수
plt.hist(data, bins=20)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram of Data')
plt.show()
def plot_scatter(x, y):
# 산점도를 그리는 함수
plt.scatter(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot')
plt.show()
히스토그램과 산점도
- 히스토그램
- 데이터의 분포를 시각화하는 데 사용되는 그래프
- 연속된 데이터의 빈도를 막대 형태로 나타내어 데이터의 분포를 살펴볼 수 있음
- 산점도
- 두 변수 간의 관계를 시각화하는 데 사용되는 그래프
- 각각의 데이터 포인트를 점으로 나타내어 변수 간의 상관 관계를 확인
- 두 변수 간의 관계를 살펴보거나 이상치를 탐지하는 데 사용
import numpy as np
def calculate_mean(data):
# 평균을 계산하는 함수
return np.mean(data)
def calculate_std(data):
# 표준편차를 계산하는 함수
return np.std(data)
def calculate_correlation(x, y):
# 상관 관계를 계산하는 함수
return np.corrcoef(x, y)
표준편차와 상관관계
- 표준편차(Standard Deviation)
- 데이터가 평균에서 얼마나 떨어져 있는지를 나타내는 측도
- 분산의 제곱근으로 계산되며, 데이터 포인트와 평균 간의 거리의 제곱의 평균의 제곱근으로 정의
- 데이터의 분포를 측정하는 데 널리 사용되며, 분산과 함께 데이터의 변동성을 나타내는 중요한 통계적 지표
- 상관관계
- 두 변수 간의 선형 관계의 강도와 방향을 나타내는 지표
- -1부터 1까지의 값을 가짐
→ 1에 가까울수록 양의 선형 관계가 강함
→ -1에 가까울수록 음의 선형 관계가 강함
→ 0에 가까울수록 선형 관계가 약하거나 존재하지 않음을 의미
data = [2, 4, 6, 8, 10]
def solution(data):
return sum(data)/len(data)
result = solution(data)
print(f"평균: {result}")
다양한 경우의 수를 가진 정답이 나올 수 있기 때문에 혹여나 완전 똑같이 코딩하지 않았더라도 취지와 결과만 맞으면 모두 정답이라고 보시면 됩니다 🙂
def calculate_average(data): total = sum(data) length = len(data) average = total / length return average
data = [2, 4, 6, 8, 10]
result = calculate_average(data)
print("평균:", result)