본문 바로가기

Data/Python

[Data/Python]실습_표본 추출

단순 임의 추출로 하면 데이터를 학습시킬 때 한쪽으로만 치우쳐 학습될 수 있음.

따라서 데이터를 균등하게 학습시키기 위해 층화 표본 추출 사용

 

층화 표본 추출

군집별로 지정한 비율 만큼의 데이터를 임의 추출

의료 통계에서 코호트 분석할 때 사용

 

계통 추출

첫 표본은 무작위 추출. 표집 간격 k만큼 떨어진 곳 데이터 추출

특정 데이터가 주기성을 가지면, 데이터를 추출할 때 편향된 표본을 뽑을 수 있어 자주 사용x

 

군집 추출

소수의 군집으로 분할. 일정 수의 소집단을 임의 표본 추출

 

 

Pandas 메서드

pandas - sample()

  • 단순임의 추출 수행
  • n은 표본 개수, frac은 비율, random_state는 표본 추출 결과를 고정
  • groupby() 추가하면 층화 표본추출 가능

sklearn(사이킷런) - train_test_split()

  • 입력 데이터프레임/배열을 train, test로 나누는 함수
  • tain_size 또는 test_size에 개수/비율을 입력해 표본 개수 조절
  • random_state는 표본 추출 결과를 고정

 

import pandas as pd
from sklearn.model_selection import train_test_split
df=pd.read_csv("bike.csv")
df.head(2)
df.sample(n=2, random_state=34)   # random_state 표본 추출 결과 고정
df["season"].unique()   # array([1, 2, 3, 4], dtype=int64)
print(len(df["season"].unique()))   # 4
print(df["season"].nunique())   # 4.  number of unique 
df.groupby("season").sample(n=2,random_state=34)   # 층화 표본 추출. 계절마다 2개씩 표본추출
df.sample(frac=0.005,random_state=34)
len(df.sample(frac=0.005,random_state=34))   # 54. 표본추출 행 개수
df.sample(frac=0.005,random_state=34).shape   # (54, 12). 54개 행, 12개 열
df_train, df_test=train_test_split(df,train_size=0.7,random_state=123)
df_train.head(2)
len(df_test)
df.sample(frac=0.0123).shape[0]
df.groupby("season").sample(frac=0.05).shape[0]

df_train,df_test=train_test_split(df,train_size=0.8,random_state=123)
df_test["temp"].max()  # 테스트데이터에서 최고 기온