[스파르타코딩클럽]데이터분석 과정/TIL,WIL

머신러닝 2 / 코드카타 / 판다스

설득이 2024. 1. 30. 20:13

머신러닝 2 

  • 다중선형회귀

비선형적 관계

범주형 데이터 

선형회귀의 가정
1. 선형성 : 종속 변수와 독립 변수 간에 선형 관계가 존재
2. 등분산성 : 오차의 분산이 모든 수준읨독립 변수에 대해 일정
3. 정규성 : 오차 항은 정규 분포를 따라야 함
4. 독립성 : X 변수는 서로 독립적
-다중공선성 문제 : 독립변수 간의 강한 상관관계가 나타나는 것

  • 범주형 데이터

순서형 자료 : 자료의 순서 의미 있음

명목형 자료 : 자료의 순서 의미 없음 

범주형 데이터를 임의로 0,1 등에 숫자로 바꾸는 것을 Encoding

  • 로짓

오즈비 : 실패 확률 대비 성공 확률

-> P는 확률 값으로 0과 1 사이의 값인데 P값이 증가할 수록 오즈비가 급격히 증가 -> Log => Logit

  • 로지스틱 함수

x값이 w1만큼 증가하면 오즈비는 ew1만큼 증가

  • 분류 평가 지표

1. 정밀도 : 모델이 양성 1로 예측한 결과 중 실제 양성의 비율 tp/tp+fp
2. 재현율 : 실제 값이 양성인 데이터 중 모델이 양성으로 예측한 비율 tp/tp+fn
3. f1-Score : 정밀도와 재현율의 조화 평균 = 2*(정밀도*재현율)/정밀도+재현율
4. 정확도 : (tp+tn)/(tp+tn+fp+fn)

SQL 코드카타

카테고리 별 상품 개수 구하기
PRODUCT 테이블에서 상품 카테고리 코드(PRODUCT_CODE 앞 2자리) 별 상품 개수를 출력하는 SQL.
결과는 상품 카테고리 코드를 기준으로 오름차순 정렬

 

  • 코드 앞 2자리 : left(,2)
  • 개수 : count
  • 정렬 : order by
SELECT
    LEFT(PRODUCT_CODE, 2) AS CATEGORY_CODE,
    COUNT(*) AS PRODUCT_COUNT
FROM PRODUCT
GROUP BY 1
ORDER BY 1;

 

User Activity for the Past 30 days 1
한달동안 (2019년 7월 27일을 마지막으로) 활동한 user 세기

 

  • user 세기 : count
  • 2019년 7월 27일이 마지막으로 30일 : between 2019-06-28 and 2019-07-27
SELECT Activity_date day, COUNT(DISTINCT user_id) active_users
FROM Activity
WHERE Activity_date BETWEEN '2019-06-28' AND '2019-07-27' #20190727까지 한달 
GROUP BY Activity_date;

 

Agrregation
도시가 california의 인구 총합

 

  • 인구 총합 : sum(population)
  • 도시가 california : district = 'california'
select sum(population)
from city
where district = 'California'

 

 


파이썬 코드카타

푸드 파이트 대
수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때,
대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요.
3가지의 음식이 준비
칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비, 물을 편의상 0번 음식
두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치

 

  • 1번 음식 3개 준비 -> 1번 음식 1개 2번 음식 4개 준비 ->2번 음식 2개 i//2
  • 가운데 물 : answer + '0' + temp
def solution(food):
    answer = ''
    for i in range(1,len(food)):
        answer += str(i)*(food[i]//2) #1번 음식 3개 준비 -> 1번 음식 1개 2번 음식 4개 준비 ->2번 음식 2개 i//2
    temp = ''.join(reversed(list(answer)))
    return answer+'0'+temp

 

콜라 문제
콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?
단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다.

 

  • 2개 이상이면 반복 : while
def solution(a, b, n):
    answer = 0
    #2개 미만이면 받을 수 없다 -> 2개 이상이면 반복
    while (n >= a):
        cock = n % a
        n = (n//a) * b #마트에서 받을 콜라
        answer += n 
        n += cock
    return answer

 


판다스

  • 컬럼별 결측치의 갯수를 확인 : sum() 
  • 전체 결측 데이터의 갯수를 합산 : sum().sum()
  • fillna() : 결측치에 대하여 일관적으로 값을 채울 수 있음

-평균으로 채우기 .mean()

-중앙값으로 채우기 .median()

-최빈값으로 채우기 .mode()

-> 반드시 0번째 index 지정하여 값을 추출한 후 채워야 함

  • dropna() : NaN값이 있는 데이터 제거

how = any  : 1개라도 NaN값이 존재시 drop

how = all : 모두 NaN값이 존재시 drop