본문 바로가기
개발/python

Kaggle - London Bike Sharing (1) - 데이터 I/O, 데이터 형태 파악

by freshplay 2023. 10. 3.

갑자기 머신러닝을 해야할 일이 생겼다.

부랴부랴 Kaggle 사이트에서 입문용 데이터셋 찾아서 공부하던 중

인프런 강의에서 듣는 코드가 실행 안되는 부분이 있어 블로그를 켜게 되었다.

 

* 여기까진 kaggle 기본 제공 코드 

import numpy as np
import pandas as pd
import os

for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        dir_data = os.path.join(dirname, filename)
        print(dir_data)

: os.walk() 뒤 경로에 있는 데이터 목록을 찾아온 다음, dir_data 변수에 할당한다.

 

 

* 필요한 python library (시각화) import

import matplotlib as plt
import seaborn as sns
import missingno as msno # 결측치 시각화용

 

* 데이터 읽어오기, 형태 파악

df = pd.read_csv(dir_data, parse_dates=['timestamp']) # 여기서 왜 timestamp를 parse_dates에 넣는지 아직 모름
df.head() # 상위 다섯개 데이터 보여줘

print('Structure of Data:', df.shape) # 데이터의 행, 열
print('Type of Data:', df.dtypes) # 각 행, 열에 들어있는 데이터들의 타입
print('Columns of Data:', df.columns) # 모든 열 정보

df.isna().sum() #데이터 중 결측치 있는지 확인 -> 모두 0으로 나오면 NaN 값인 데이터가 없는거

msno.matrix(df) # 결측치가 있는 행은 하얀색으로 표시된다
plt.show()

* 데이터 재분류

 -> 지금 분류되어있는 데이터만으로는 학습에 적합하게 만들기 힘들 때, 새로 분류를 한다.

 ex) timestamp 행에 2015-01-04 01:00:00 인 데이터를 year / month / dayofweek / hour로 분류하여 년도별/월별/주별/시간별 데이터로 볼 수 있게 변경

# timestamp 라는 이름의 열에서 year를 추출해서 df의 'year'라는 열에 넣겠다.
df['year'] = df['timestamp'].dt.year 
df['month'] = df['timestamp'].dt.month 
df['dayofweek'] = df['timestamp'].dt.dayofweek 
df['hour'] = df['timestamp'].dt.hour
df.head()
# 새로 분류한 데이터에 값이 몇 개 있는지 확인
df['year'].value_counts()

 

※ 인프런 강의에서 처음 에러났던 부분이 여기였다...

# 데이터 시각화
# 연도별 자전거 이용객 수 표
import seaborn as sns
b,a = plt.subplots(1,1,figsize=(10,5))
sns.boxplot(x=df['year'], y=df['cnt'])
b,a = plt.subplots(1,1,figsize=(10,5))
sns.boxplot(x=df['month'], y=df['cnt'])