본문 바로가기

DATA SCIENCE/VISUALIZATION

[Python] kaggle bike 데이터를 이용한 pandas 전처리 / seaborn 시각화

trn : train data / tes : test data

>> datetime 전처리

# datetime 열에서 시간, 요일, 월, 연도 열 추출
trn['hour']  = [t.hour for t in pd.DatetimeIndex(trn.datetime)]
trn['month'] = [t.month for t in pd.DatetimeIndex(trn.datetime)]
trn['year']  = [t.year for t in pd.DatetimeIndex(trn.datetime)]
tes['hour']  = [t.hour for t in pd.DatetimeIndex(tes.datetime)]
tes['month'] = [t.month for t in pd.DatetimeIndex(tes.datetime)]
tes['year']  = [t.year for t in pd.DatetimeIndex(tes.datetime)]

# 시간, 요일, 월, 연도별 평균 계산
hour = trn.groupby(['hour']).mean()['count']
month = trn.groupby(['month']).mean()['count']
year = trn.groupby(['year']).mean()['count']

# 해당 평균 입력
data['hour'] = data['hour'].map(lambda x : hour[x])
data['month'] = data['month'].map(lambda x : month[x])
data['year'] = data['year'].map(lambda x : year[x])

 

>> datatype 변경

# datatype 변경해주기
data['datetime'] = pd.to_datetime(data['datetime'])
data['season'] = data['season'].astype('object')
data['holiday'] = data['holiday'].astype('object')
data['workingday'] = data['workingday'].astype('object')
data['weather'] = data['weather'].astype('object')

 

>> 범주형 데이터 파악 및 NA 값 확인 / one-hot encoding(get_dummies)

# 범주형 데이터 파악
for col in obj_cols:
    uniq = np.unique(data[col].astype(str))
    print('-' * 50)
    print('# col {}, n_uniq {}, uniq {}'.format(col, len(uniq), uniq))
    
# NA 값 확인
for col in trn.columns:
    msg = 'column: {:>10}\t Percent of NaN value: {:.2f}%'.format(col, 100 * (data[col].isnull().sum() / data[col].shape[0]))
    print(msg)
    
# 나머지 범주형 데이터 one-hot encoding
onehot = pd.get_dummies(data.season, prefix='season')

 

>> train / test 분할

data_trnX = data.iloc[0:int(len(trn)*0.7)].drop(['datetime','casual','registered','count'],axis=1)
data_trnY = data.iloc[0:int(len(trn)*0.7)]['count']
data_tesX = data.iloc[int(len(trn)*0.7):len(trn)].drop(['datetime','casual','registered','count'],axis=1)
data_tesY = data.iloc[int(len(trn)*0.7):len(trn)]['count']
data_tesD = data.iloc[int(len(trn)*0.7):len(trn)]['datetime']

 


seaborn

sns.distplot : 분포

sns.lineplot : 막대그래프 (시계열적 분포 확인)

반응형