Today's Goals
1. 다시 학습 주간에 익숙해지기 - 코드카타 SQL & 파이썬
2. 통계학...이걸 내가 또 배울 줄이야
1. 코드카타
SQL
[결과가 없을 때 select column과 select max(column)의 차이]
- select column은 조건에 맞는 행이 없으면 빈테이블을 반환함
- 하지만 SQL 문제에서 조건이 맞는 행이 없으면 null을 반환하라는 조건이 있었음
- 집계함수가 추가되면 결과가 없더라도 null을 반환해줌(집계함수의 특징 > 집계 함수가 반환값을 하나의 값으로 압축하려하기 때문에 빈 입력이 들어오면 반환할 값이 없으므로 NULL을 반환하게 됨)
-- 두번째로 높은 급여 구하기
with sub as (select id, salary,
dense_rank() over (order by salary desc) as ranking
from Employee)
select max(salary) as SecondHighestSalary
from sub
where ranking = 2;
-- 다른 답안
select max(salary) as SecondHighestSalary
from Employee
Where salary < (select max(salary) from Employee)
[컬럼값을 모두 합쳐서 하나의 문자열로, group_concat]
select sell_date,
count(distinct product) as num_sold,
group_concat(distinct product) as products
from Activities
group by sell_date
- group_concat(column)은 column의 값들을 모두 합쳐서 하나의 문자열로 반환('a, b, c, d')하는데 기본 구분자는 ,
- 정렬과 구분자 설정 모두 가능한 함수
[MySQL] 조건에 맞는 값들을 묶어서 출력하기 GROUP_CONCAT
1) 예시로 기본 사용법 알아보기 - 'department1' TABLE 기본 형태 - GROUP_CONCAT 함수 적용한 'department1' TABLE 위와 같이 '같은 팀' 조건에 해당하는 값들을 묶어서 출력하는 쿼리는 아래와 같습니다. SELECT t
wnwa.tistory.com
파이썬
[n, m의 최대공약수와 최소공배수 구하기]
def solution(n, m):
for i in range(1, min(n,m)+1) :
if n%i == 0 and m%i == 0 :
max_num = i
for j in range(max(n,m), (n*m)+1) :
if j%n == 0 and j%m == 0 :
min_num = j
break
answer = [max_num,min_num]
return answer
- 최대공약수를 구하는 방법까진 생각났지만 최소공배수에서 막힘(n과 m에 어떤 값을 곱해서 배수가 같아질 때를 구해야지 생각했지만 곱하는 값이 각각 다를 수 있기 때문에 no..)
- 위에서 최대공약수가 같은 값이므로 i로 통일했으니 최소공배수 또한 같은 값이 최소공배수에 대한 조건을 걸어야 했음
- 최대공약수 조건은 break를 넣으면 안되는데, break를 넣으면 i에 해당하는 첫번째 값(최소값)이 반환되기 때문이며, 최소공배수를 구하는 반복문에서 break가 들어간 이유기도 함
[n진법으로 변환하기]
- 일단 n진법이 뭔지 전혀 기억나지 않았음 ㅎ... 아래 블로그 참고
https://blog.naver.com/noksek0615/223141412248
[이산수학 기초] 1. N진법의 계산과 변환방법
이산수학은 컴퓨터 프로그래밍을 배우기 위해 최소한 알아두어야할 내용입니다. 중요하지만 어려우므로 개...
blog.naver.com
def solution(n):
answer = ''
while n > 0 :
n, rest = divmod(n,3)
answer += str(rest)
return int(answer, 3)
- divmod 는 몫과 나머지를 튜플 형식으로 반환함 > (a,b)
- int(string, base)는 string으로 입력된 숫자를 base진법에서 10진법 정수로 바꿔줌
- 10진법에서 n진법으로 바꾸는 기본적인 함수는 아래와 같음
def solution(n, q):
rev_base = ''
while n > 0:
n, mod = divmod(n, q) n을 p으로 나눈 몫과 나머지
rev_base += str(mod)
return rev_base[::-1]
- 나머지 값을 rev_base 라는 문자열에 계속 += 해주면 역순으로 문자열이 만들어짐(제일 앞으로 값이 추가됨)
- 따라서 최종적으로 n진법 수를 반환하려면 reverse가 필요함(위 풀이에서는 n진법 수를 역순으로 뒤집은 결과를 10진법으로 바꾸라고 했기 때문에 reverse 없음)
[Python] - 파이썬 진수변환(2진법, 3진법, 5진법, 10진법).. [n진법]
Pyhton 진법 변환 n진수 → 10진수 * 결과값은 모두 string * python에서는 기본적으로 int() 라는 함수를 지원한다 >> int(string, base) 위와 같은 형식으로 사용. base에는 진법을 넣으면 된다. print(int('101',2))
eesko.tistory.com
[함수를 정의할 때, 빈 변수를 정의하는 위치는 중요하다]
def solution(s):
split_s = s.split(' ')
new_split_s = []
for word in split_s :
new_word = ''
for i in range(len(word)) :
if i % 2 == 0 :
new_word += word[i].upper()
else :
new_word += word[i].lower()
new_split_s.append(new_word)
return ' '.join(new_split_s)
- split은 구분자를 기준으로 단어 혹은 문자를 나눠 리스트로 반환
- 처음 답안에서는 new_split_s = [] 라는 빈 리스트를 첫번째 반복문 밑에 정의해줌
- 결과 값은 계속 마지막 단어인 world에 대해서만 나옴
- 빈 리스트를 정의하는 new_split_s가 첫번째 반복문 아래 있어, 분리된 각 단어에 대해 새로운 반복문이 수행될 때마다 새롭게 빈 리스트로 리셋되어 이전에 추가한 단어가 사라졌기 때문
- 각 변수 지정, 혹은 연산 등의 동작이 어디에 종속되는지 주의해야 함
- 리스트에 처리가 완료된 단어를 담는 것 말고, =''를 통해 문자열 변수로 정의하고, += new_word 와 += ' '를 순서대로 해줘도 되지만, 이렇게 되면 마지막 단어 뒤에도 공백이 추가되어 이걸 삭제해주는 과정 필요(answer[:-1] 처럼)
2. 통계학
기초강의
[유의성 검정]
① A/B 검정
- 두 그룹의 비교를 위해 > 두 버정 중 어느 것이 더 효과적인지 평가
- 두 그룹간의 변화(차이)가 우연한 결과가 아닌 통계적으로 유의미한지 확인
②가설 검정
- 데이터가 특정 가설을 지지하는지 검정
- 표본 데이터를 통해 모집단의 가설을 검증
- 귀무가설(H0, 변화/차이/효과 없는 기존 상태)과 대립가설(H1, 변화/차이/효과 있음)을 설정하고 유의수준과 p값을 비교하여 귀무가설 기각 여부 결정
- p값은 귀무가설이 참일 경우 관찰된 통계치(극단적 결과)가 나올 확률을 의미함 > 통계적 유의성이 있다는 의미
- 보통 p값이 유의수준보다 작으면 귀무가설을 기각하는데, 일반적으로 이 유의수준을 0.05로 설정
- 신뢰구간은 특정 모수가 포함될 범위를 제공하는 것으로, 모집단의 평균이 특정 범위 내에 있을것이라는 확률을 나타내는 것이고 가설검정은 모수가 특정 값과 같은지 다른지 테스트 하는 것
③t검정
- 가설검정의 대표적인 방법
- 두 집단 간의 평균 차이가 통계적으로 유의미한지 확인하는 것
- 독립표본 t검정은 독립된 그룹의 평균을 비교하는 것임(두 반의 시험 성적 비교)
- 대응표본 t검정은 동일한 그룹의 전후 평균을 비교하는 것임(다이어트 전 후 체중 비교)
④다중검정
- 여러 가설을 동시에 검정할 수 있지만, 각 검정마다(두가지씩 비교하는) 유의수준을 조정하지 않으면 1종오류 발생 확률이 높아짐
- 본페로니 보정(대표적), 튜키 보정, 던넷 보정, 윌리엄스 보정 등으로 보정하는 과정 필요
⑤카이제곱검정
- 범주형 데이터 표본 분포가 모집단 분포와 일치하는지 검정(적합도 검정)
- 관찰 분포와 기대 분포가 일치하는지 검정하는 것으로, p값이 높으면 관찰 데이터와 귀무 가설이 적합
- p값이 낮으면 귀무 가설 기각이므로 관찰 데이터와 귀무 가설 부적합
- 두 범주형 변수 간의 독립성 검정
- p값이 높으면 두 변수 간 연관성이 없는 것이므로 독립성이 있다고 판단
- p값이 낮으면 두 변수 간 연관성이 있는 것이므로 독립성이 없다고 판단
[제1종 오류와 제2종 오류]
- 제1종 오류는 귀무가설이 참인데 기각하는 것
- 잘못된 긍정(위양성)을 의미하는 것으로, 아무런 영향이 없는데 영향이 있다고 판단하는 것
- 제1종 오류는 유의수준을 경계로 귀무가설을 기각하는 점을 이용해 유의수준으로 제어함
- 유의수준을 0.05라고 정하는 것은 5%의 확률로 일어나는 제1종 오류는 감수한다는 의미임
- 제2종 오류는 귀무가설이 거짓인데 기각하지 않는 것
- 잘못된 부정(위음성)을 의미하는 것으로, 영향이 있는데도 영향이 없다고 판단하는 것
- 제2종 오류를 통제하는 방법은 따로 없고 표본 크기를 키우거나, 유의수준을 너무 낮추면 제2종 오류가 일어날 확률이 높아지는 상충관계를 이용하는 것
'데이터 부트캠프 - Today I Learned' 카테고리의 다른 글
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_8주차_25.01.14 (0) | 2025.01.14 |
---|---|
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_7주차_25.01.09 (0) | 2025.01.09 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_7주차_25.01.07 (0) | 2025.01.07 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_7주차_25.01.06 (0) | 2025.01.06 |
[스파르타 내일배움캠프 / 데이터 분석 트랙] WIL(Weekly I Learned)_6주차 (0) | 2025.01.05 |