데이터 부트캠프 - Today I Learned

[스파르타 내일배움캠프 / 데이터 분석 트랙] TIL(Today I Learned)_8주차_25.01.16

onion95 2025. 1. 16. 21:56

Today's Goals

1. 코테 연습은 매일매일 - 코드카타 SQL & 파이썬

2. 통계학 개인과제

 

 

 

QCC한테 제대로 당해따 으악

 

 

 

 

 

1. 코드카타

 

파이썬


 

[정렬의 기준을 정해주는 방법, sorted() 함수의 key 설정]

# 간단한 답
def solution(strings, n):
    return sorted(strings, key= lambda x : (x[n], x))
  • 위의 key에서 x는 strings 배열 안의 하나의 요소를 의미함
  • x단어의 n번째 알파벳 순서로 정렬하고, 동일 값이라면 x단어를 오름차순으로 정렬한다는 의미
  • key는 sorted 함수 안에서 정렬의 기준을 정해주는 매개변수로, 2개 이상의 조건을 튜플형태로 감싸 넣어줌
  • 예시 사용법은 아래 블로그 참고

https://velog.io/@rockwellvinca/python-sorted-sort-key-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[python] sorted(), sort(), key 사용법

정렬과 관련한 문제를 해결하다가 sort에 대한 key의 기준에 대해서 정리하게 되었다.sorted와 sort는 근본적으로 매우 유사하다.하지만 사용방법에서의 약간의 차이가 있다.바로 알아보도록 하자.

velog.io

https://sxbxn.tistory.com/19

 

[Python] 정렬 (sort & sorted, reverse, key)

🔍 Sorting HOW TO 단어 정렬 문제(백준의 1181)를 풀다가 확실히 정렬에 대해 정리할 필요가 있겠다는 생각이 들어 작성해 본다. 공식 문서를 참고하였고, sort와 sorted 그리고 reverse와 key에 대해서 정

sxbxn.tistory.com

 

  • 해당 문제를 처음 풀었던 답은 다음과 같았음
# 처음 답안
def solution(strings, n):
    strings.sort()
    answer = []
    n_character = []
    
    for i in strings :
        n_character.append(i[n])
        n_character.sort()
    for i in n_character :
        for j in strings :
            if i == j[n] and j not in answer :
                answer.append(j)
    return answer
  • strings.sort()를 먼저 해준 이유 : 오름차순 정렬을 먼저 해주지 않으면, 기존 strings 리스트에 단어가 정렬되어 있던 순서대로 최종 answer에 단어가 담기므로, n번째 알파벳이 같은 단어는 전체 단어를 기준으로 오름차순 정렬하라는 조건을 만족하지 못할 수 있음
  • 미리 단어를 오름차순 정렬하여 최종 조건에 맞도록 설정해주는 것
  • j not in 조건 이유 : 최종적으로 answer 리스트에 단어가 추가될 때, 한번에 n번째 알파벳과 i가 같은 경우의 단어가 모두 불러와지는데, i가 중복값인 경우 해당 단어를 모두 불러오는 것이 두번 반복되어 answer에 중복 단어가 생김
  • j not in 조건을 넣어주어 answer 리스트에 단어 j가 이미 있는지 체크하는 것임 

 

 

 

 

2. 통계학 개인과제


 

[t검정의 양측검정과 단측검정]

  • 양측검정은 평균이 같지 않음만을 확인하는 것이고 단측검정은 특정 방향으로 치우침이 있는(한 집단 평균이 다른 집단보다 크거나 작은) 것을 확인하는 것
  • 단측검정에서는 양측검정에서 얻은 p값을 절반으로 나누어 해석해야 함
  • 양측검정의 경우, t통계량이 양쪽의 극단적인 값을 나타낼 때 귀무가설을 기각, 즉, 양 극단이 귀무가설의 기각역임
  • 단측검정은 차이가 특정한 방향으로 발생한다고 가정한 것이므로, 특정 방향에 t통계량이 있는 경우에 귀무가설을 기각, 즉, 그래프의 한쪽 극단만 기각역임
  • 단측검정에서는 p값이 한쪽 극단 값만 고려되므로 양측검정보다 작은 값이고, 따라서 귀무가설을 기각하기 쉬워짐
  • 단측검정에서 첫번째 집단의 평균이 두번째보다 큰 경우는 우측검정, 두번째보다 작은 경우는 좌측검정으로 생각하면 됨(t통계량 = (첫번째 집단 평균 - 두번째 집단 평균) / 표본오차  > 양수, 음수로 생각 가능)
  • 양측검정, 단측검정(우측검정, 좌측검정)에 따라 달라지는 가설 설정에 대한 내용은 아래 블로그

https://rfriend.tistory.com/754

 

[Python] 두 집단 간 평균 차이를 검정하는 t-test

이번 포스팅에서는 Python을 사용해서 두 집단 간 평균이 같은지 아니면 다른지를 검정하는 t-test 를 해보겠습니다. 연속형 확률분포인 t-분포 (Student's t-distribution) 에 대해서는 https://rfriend.tistory.co

rfriend.tistory.com

  • t검정 코드 관련 자료는 아래 블로그

https://blog.naver.com/breezehome50/222324249905

 

[파이썬, 데이터 분석] t-test 평균 검정

t-test 평균 검정 python을 이용한 t-test 수행방법에 대해 알아보도록 하겠습니다. t-test는 크게 1. 일표...

blog.naver.com

 

 

[t검정에서의 t통계량]

  • t통계량 = (첫번째 집단 평균 - 두번째 집단 평균) / 표본오차
  • t통계량은 표본 평균들 간의 차이를 표준오차로 나눈 값, 즉, 표본 평균들 간의 차이가 표준오차에 비해 얼마나 큰지 나타냄
  • 값이 크면 표준오차에 비해 표본 평균 간의 차이가 큰 것이므로, 두 집단 간의 유의미한 차이가 있을 가능성이 높음(귀무가설 기각 근거)
  • 값이 작으면 평균 차이가 표준 오차에 비해 작은 것이므로, 두 집단 간의 차이는 우연일 가능성이 높음(귀무가설 채택 근거)
  • t통계량이 클수록 p값은 작아지고, 양수인 경우 첫번째 집단 평균이 두번째 집단 평균보다 큼

 

 

[카이검정의 종류 3가지]

  • 적합성 검정 : 관찰값이 예측값의 분포를 따르는지 확인
  • 독립성 검정 : 두 변수간의 관련이 있는지 확인
  • 동질성 검정 : 여러 그룹의 분포가 동일한지 확인

https://wikidocs.net/227335
https://wikidocs.net/258588

 

10_04. 카이제곱검정 실행하기 - scipy.stats 이용

* 카이제곱 검정은 두 가지 주요 용도로 사용됩니다: * 적합성 검정(Goodness of Fit Test): 데이터가 기대되는 분포에 적합한지 여부를 확인합니다. * 독립성 …

wikidocs.net

 

5.2.3.1. Chisquare test

## 카이제곱 검정 파이썬에서 카이제곱 검정을 하는 방법은 scipy.stas를 이용하면 된다. stats.chi2_contingency()함수를 이용하여 분석을 한다.…

wikidocs.net

 

 

[파이썬 카이검정 코드 기본 사용법]

  • 적합성검정 : chisq_stat, p_value = stats.chisquare(f_obs=observed(관찰빈도수), f_exp=expected(기대빈도수))
  • 독립성 검정 : chisq_stat(카이제곱 통계량), p_value, dof(자유도), expected(기대빈도수) = stats.chi2_contingency(data(피벗형태))
  • 동질성 검정 : chisq_stat(카이제곱 통계량), p_value, dof(자유도), expected(기대빈도수) = stats.chi2_contingency(data)

 

 

[클릭수는 이산형 변수인데 어떻게 카이검정에 사용되는가]

  • 클릭수 자체는 이산형 변수이지만 카이검정에서 클릭을 한 것(1)과 클릭을 하지 않은 것(0)이라는 범주형 변수로 변환할 수 있으며, 각 변수의 빈도수를 표현한 것이 클릭수가 됨(카입검정은 범주형 데이터의 빈도를 비교하는 것)
  • 헤드라인별 평균 클릭수와 같은 연속형 변수 혹은 순수한 이산형 비교하고자 한다면, ANOVA(분산분석)과 같은 다른 방법을 사용해야 함

 

 

[난수 생성에 사용되는 기본 코드 사용법]

https://wikidocs.net/269241

 

02_05. scipy를 이용하여 난수 만들기 – 분포함수.rvs 메소드 이용

scipy 라이브러리에서 난수를 생성하는 함수는 주로 scipy.stats 모듈에서 제공됩니다. 다양한 확률 분포에서 난수를 생성할 수 있는 기능을 제공합니다. 몇 가지 주요 함…

wikidocs.net

  • np.random.seed(42) : 난수 생성기의 초기 상태를 설정하는 역할(재현성 확보)
  • 암호화 키 생성이나 게임 내 동작 시뮬레이션과 같은 매번 다른 난수를 요구하는 상황이 아닐 때 사용 권장(실험 결과 재현이 필요할 때, 샘플링에 대한 반복 검증이 필요할 때 등)
  • 이항분포 : binomial_data = binom.rvs(n(시행횟수)=10, p(성공확률)=0.5, size(난수개수)=1000)
  • 균등분포 : uniform_data = uniform.rvs(loc(분포시작값)=0, scale(분포범위)=10, size(난수개수)=1000)
  • 표준정규분포 : normal_data = norm.rvs(size=1000)

 

 

[부트스트랩]

  • 추출된 표본을 마치 모집단처럼 생각하여, 그로부터 복원 추출하는 방법론(추출한 샘플을 다시 중복해서 추출 가능)
  • n개의 데이터로부터 n개를 샘플링하여 각 부트스트랩 샘플로부터 원하는 통계량을 계산함
  • 위 계산을 k번 반복하여 얻어진 통계량의 분포를 기반으로 신뢰구간을 구함