- FACTS :
- ✅ 오전 SQL, 알고리즘 코드카타 각 1문
- ✅ 오후 라이브세션 복습
- ✅ 오후 머신러닝 VOD강의 기초 1주차 완강
- ✅ 오후 통계학 개인과제 1-3문
- FEELINGS : 알고리즘 코드카타 한문제를 경우의 수를 구하려고 한시간동안 머리를 굴려가며 겨우 구현했는데, 알고보니 combination이란 아주 편리한 함수가 있었다. 아는만큼 보인다... 아는 것이 힘이다... 아무튼 많이 풀어보고 기억하는 수 밖에!!
머신러닝 VOD강의에서는 회귀분석을 배우며 실습을 해봤는데 이론과 실습의 개념들이 이어지지 않은 기분이 들었다. 실습을 따라 해봐도 모델 설계도를 가져오고 학습, 평가, 예측하는 과정이 코드 하나로 끝나버리니까 맞는 결과값인지 확인하기 힘들었다. 이론 개념이 확실하게 잡히지 않았기 때문일까..? 아직 기초반이니까 이론학습부터 탄탄히 해봐야겠다.
- FINDINGS : combination함수, stats.t.interval() : t-분포에서의 신뢰구간을 계산, 독립 이표본 t-test 검정하는 법
⭐️공식문서로 찾아보는 연습하기. 영어라고 피하지 말자...!
SQL 코드카타
SELECT product_name, year, price
FROM Sales s
JOIN Product p ON s.product_id = p.product_id
알고리즘 코드카타
[정리]
입력값 : [-2, 3, 0, 2, -5] -> [n(0), n(1), n(2), n(3), n(4)]
조건 확인 방법 :
n(0) + n(1) + n(2)
n(0) + n(1) + n(3)
n(0) + n(1) + n(4)
n(0) + n(2) + n(3)
n(0) + n(2) + n(4)
n(0) + n(3) + n(4)
n(1) + n(2) + n(3)
n(1) + n(2) + n(4)
n(1) + n(3) + n(4)
n(2) + n(3) + n(4)
반복되는 값으로 묶으면 -> n(i) + n(j) + n(k)
(i,j,k는 인덱스)
i = 0 ~ (len(n) - 2)
j = (i + 1) ~ (len(n) - 1)
k = (j + 1) ~ len(n)
def solution(number):
answer = 0
for i in range(len(number)-2):
for j in range(i+1, len(number)-1):
for k in range(j+1,len(number)):
if number[i] + number[j] + number[k] == 0:
answer += 1
return answer
#테스트1
[-2, 3, 0, 2, -5]
#출력 : 2
#테스트2
solution([-3, -2, -1, 0, 1, 2, 3])
#출력 : 5
#테스트3
[-1, 1, -1, 1]
#출력 : 0
# 다른 코드
from itertools import combinations as comb
def solution(number):
return sum(not sum(c) for c in comb(number,3))
- combinations 라이브러리 사용
- 조합은 순서를 고려하지 않기 때문에 [A, B, C]의 리스트에서 2개의 원소를 골라 나열하면
[(A, B), (A, C), (B, C)] 가 나오게 된다. 조합은 (A, B)와 (B, A)는 같은 것으로 취급한다. - 참고 : https://docs.python.org/ko/3/library/itertools.html
통계학 개인과제 문제1
- 문제
- 회사 주식에 투자하고자 합니다. 하지만 보수적인 나는 변동성이 크지 않은 회사를 골라 안정적인 투자를 희망합니다. 이를 위해 2가지 회사로 좁혔고 A,B회사의 6일간 주가 데이터를 수집하였습니다. Numpy 혹은 Pandas를 이용하여 회사의 변동계수를 구해봅시다.
- 변수명
- cv_a_np : a 회사의 변동계수
- cv_b_np : b 회사의 변동계수
- 변동계수 : 표준편차 / 평균
import numpy as np
com_a = [76300, 77400, 77900, 77200, 76900, 78800]
com_b = [6400, 7000, 7400, 6900, 7300, 7600]
cv_a_np = np.std(com_a) / np.mean(com_a)
cv_b_np = np.std(com_b) / np.mean(com_b)
# 결과 출력
print(f'A회사의 변동계수 {cv_a_np:.3f}')
print(f'B회사의 변동계수 {cv_b_np:.3f}')
# 출력
A회사의 변동계수 0.010
B회사의 변동계수 0.055
문제2. 신뢰구간 구하기
- 출제의도
- scipy 의 함수를 이용해서 신뢰구간을 구합니다.
- 문제
- 평균이 $\mu$ 이고 표준편차가 $\sigma = 8$ 인 정규분포를 따르는 모집단에서 크기가 25인 표본을 추출하여 평균을 계산하였더니 $\bar{x}$가 42.7 이다. 이때 $\mu$에 대한 95% 신뢰 구간을 구하라.
- stats.t.interval() : t-분포에서의 신뢰구간을 계산
# 제출코드
import scipy.stats as stats
import numpy as np
import math
# 주어진 값들
sigma = 8 # 모집단의 표준편차
n = 25 # 표본 크기
x_bar = 42.7 # 표본 평균
confidence_level = 0.95 # 신뢰 수준
#방법1 고전적인 방법
upper_bound = x_bar + (1.96 * (sigma / math.sqrt(n)))
lower_bound = x_bar - (1.96 * (sigma / math.sqrt(n)))
#출력 : (39.39776230139517, 46.00223769860484)
#방법2 scipy사용
#표준오차 계산
se = sigma / math.sqrt(n)
#구간추정
stats.t.interval(confidence_level, n-1, x_bar, se)
#출력 : (39.39776230139517, 46.00223769860484)
# 결과 출력
print(f"95% 신뢰 구간: ({lower_bound:.2f}, {upper_bound:.2f})")
# 출력값
95% 신뢰 구간: (39.56, 45.84)
문제3. 이표본 t 검정
- 출제의도
- 귀무가설과 대립가설을 설정할 수 있다.
- t검정에 이해하고 올바르게 해석할 수 있다.
- t검정에 적절한 전달인자를 넣을 수 있다.
- 문제
- 목초에 따른 우유의 생산량을 알아보기위하여 25마리 젖소를 대상으로 3주동안 임의로 추출된 12마리 젖소에게 건조시킨 목초를 주고 13마리 젖소에게는 들판에서 말린 목초를 주었다.
- 두 종류의 모 표준편차는 같다고 가정하고 또한 우유생산량의 자료는 정규분포를 따른다고 가정한다.
- 자연적으로 말린 목초의 사육하는 젖소의 우유생산량이 인공적으로 말린 목초로 사용하는 젖소보다 많다고 할 수 있는지 유의수준 0.05 에서 검정하세요.(단측 검정)
# 제출 코드
import numpy as np
from scipy.stats import ttest_ind
nature = [44, 44, 56, 46, 47, 38, 58, 53, 49, 35, 46, 30, 31] # 자연적으로 말린 목초
artificial = [35, 47, 55, 29, 40, 39, 32, 41, 42, 57, 51, 39] # 인공적으로 말린 목초
print("H0: 귀무가설은 자연적으로 말린 목초와 인공적으로 말린 목초의 우유 생산량에 차이가 없다.")
print("H1: 대립가설은 자연적으로 말린 목초와 인공적으로 말린 목초의 우유 생산량에 차이가 있다.")
#독립 이표본 t-test
t_stat, p_value = ttest_ind(nature, artificial, equal_var=True, alternative = 'greater')
#결과 출력
print(f"t-통계량: {t_stat:.4f}")
print(f"p-value: {p_value:.4f}")
#가설 검정
alpha = 0.05
if p_value < alpha :
print("귀무가설을 기각합니다.")
else :
print("귀무가설을 기각하지 않습니다.")
※ 수정: 단측검정이므로 alternative = 'greater' 추가.
t_stat, p_value = ttest_ind(nature, artificial, equal_var=True, alternative = 'greater')
'내일배움캠프 > TIL' 카테고리의 다른 글
[TIL]250116_파이썬 베이직 4회차 복습, 개인과제 문제6 (0) | 2025.01.16 |
---|---|
[TIL]250115_통계학 개인과제 문제4,5 (0) | 2025.01.15 |
[TIL]250113_코드카타, 파이썬 베이직 라이브세션 (0) | 2025.01.13 |
[TIL]250110_코드카타, 파이썬 개인과제 6번 (0) | 2025.01.10 |
[TIL]250109_코드카타, 파이썬 베이직반 2회차, 통계학 3회차 (0) | 2025.01.09 |