본문 바로가기
Kaggle

2-2_Bike Sharing Demand

by Hot김치 2022. 7. 11.

[The Sequence of Analaysis]

  • Part1: Feature Engineering and Data Cleaning:
    • 1) Adding any few features.
    • 2) Removing redundant features.
    • 3) Converting features into suitable form for modeling.
  • Part2: Exploratory Data Analysis(EDA):
    • 1) Analysis of the features.
    • 2) Finding any relations or trends considering multiple features.
  • Part3: Predictive Modeling

Part1

Feature Engineering and Data Cleaning

  • 1) Adding any few features
  • 2) Removing redundant features
  • 3) Data Cleaning and Null Check
  • 4) Converting features into suitable form for modeling

train dataset에서 앞에 5개만 출력해서 확인해 보자.

In [3]:
df_train.head()

Data Dictionary

  • datetime - hourly date + timestamp
  • season
    • 1 = spring
    • 2 = summer
    • 3 = fall
    • 4 = winter
  • holiday - whether the day is considered a holiday
  • workingday - whether the day is neither a weekend nor holiday
  • weather
    • 1: Clear, Few clouds, Partly cloudy, Partly cloudy
    • 2: Mist + Cloudy, Mist + Broken clouds, Mist + Few clouds, Mist
    • 3: Light Snow, Light Rain + Thunderstorm + Scattered clouds, Light Rain + Scattered clouds
    • 4: Heavy Rain + Ice Pallets + Thunderstorm + Mist, Snow + Fog
  • temp - temperature in Celsius
  • atemp - "feels like" temperature in Celsius
  • humidity - relative humidity
  • windspeed - wind speed
  • casual - number of non-registered user rentals initiated
  • registered - number of registered user rentals initiated
  • count - number of total rentals
In [4]:
df_train.shape
Out[4]:
(10886, 12)

Total rows and columns

Training dataset은 10886 rows & 12 columns 으로 구성되어 있다.

In [5]:
df_train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10886 entries, 0 to 10885
Data columns (total 12 columns):
 #   Column      Non-Null Count  Dtype         
---  ------      --------------  -----         
 0   datetime    10886 non-null  datetime64[ns]
 1   season      10886 non-null  int64         
 2   holiday     10886 non-null  int64         
 3   workingday  10886 non-null  int64         
 4   weather     10886 non-null  int64         
 5   temp        10886 non-null  float64       
 6   atemp       10886 non-null  float64       
 7   humidity    10886 non-null  int64         
 8   windspeed   10886 non-null  float64       
 9   casual      10886 non-null  int64         
 10  registered  10886 non-null  int64         
 11  count       10886 non-null  int64         
dtypes: datetime64[ns](1), float64(3), int64(8)
memory usage: 1020.7 KB
In [6]:
df_train.isnull().sum()
Out[6]:
datetime      0
season        0
holiday       0
workingday    0
weather       0
temp          0
atemp         0
humidity      0
windspeed     0
casual        0
registered    0
count         0
dtype: int64

Types of Features

  • Categorical Features
    • 범주형 변수는 두 개 이상의 범주가 있는 변수이며 해당 기능의 각 값은 범주별로 분류될 수 있다.
    • 예를 들어, 성별은 두 개의 범주(남성과 여성)가 있는 범주형 변수이다.
    • 이러한 변수는 정렬하거나 순서를 정할 수 없다. Nominal 변수라고도 한다.
    Categorical Features in the dataset: season, holiday, workingday, weather
  • Ordinal Features
    • 순서형 변수는 범주형 값과 유사하지만 두 값 사이에 상대적인 순서를 지정하거나 정렬할 수 있다.
    • 예를 들어 높이와 같은 변수에 상대적 정렬을 가질 수 있다.
    Ordinal Features in the dataset:
  • Continous Feature
    • 두 점 사이 또는 최소값 또는 최대값 사이의 값을 취할 수 있는 경우, 이러한 경우 특성을 연속적이라고 한다.
    Continous Features in the dataset: temp, atemp, humidity, windspeed, casual, registered, count

Data Summary

  • 데이터의 누락이 없어 보이며, 11개의 columns을 가지고 있다.
  • datetime 열에서 새로운 열 [year, month, day, hour, minute, second]을 생성한다.
    • 이미 유용한 기능을 추출했으므로 datetime 열을 삭제
  • 하지만 season, holiday, workingday and weather는 int 타입이 아닌 categorical 이어야 한다.

1) Adding any Few Features

a. 기존에 있는 datatime열에서 새로운 열 추출

  • 새로운 열 추출 후, datetime drop
In [7]:
df_train["year"] = df_train["datetime"].dt.year
df_train["month"] = df_train["datetime"].dt.month
df_train["day"] = df_train["datetime"].dt.day
df_train["hour"] = df_train["datetime"].dt.hour
df_train["minute"] = df_train["datetime"].dt.minute
df_train["second"] = df_train["datetime"].dt.second

df_train = df_train.drop(['datetime'], axis=1)

b. Category type으로 변환

In [8]:
categoryVariableList = ['season', 'holiday', 'workingday', 'weather']
for var in categoryVariableList:
    df_train[var] = df_train[var].astype('category')
In [9]:
df_train.head()
In [10]:
df_train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10886 entries, 0 to 10885
Data columns (total 17 columns):
 #   Column      Non-Null Count  Dtype   
---  ------      --------------  -----   
 0   season      10886 non-null  category
 1   holiday     10886 non-null  category
 2   workingday  10886 non-null  category
 3   weather     10886 non-null  category
 4   temp        10886 non-null  float64 
 5   atemp       10886 non-null  float64 
 6   humidity    10886 non-null  int64   
 7   windspeed   10886 non-null  float64 
 8   casual      10886 non-null  int64   
 9   registered  10886 non-null  int64   
 10  count       10886 non-null  int64   
 11  year        10886 non-null  int64   
 12  month       10886 non-null  int64   
 13  day         10886 non-null  int64   
 14  hour        10886 non-null  int64   
 15  minute      10886 non-null  int64   
 16  second      10886 non-null  int64   
dtypes: category(4), float64(3), int64(10)
memory usage: 1.1 MB

2) Removing redundant features

In [11]:
print(df_train['hour'].unique())
print(df_train['minute'].unique())
print(df_train['second'].unique())
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[0]
[0]
  • [minute] / [second] 에 데이터가 모두 0이기에 삭제
In [12]:
df_train = df_train.drop(['minute'], axis=1)
df_train = df_train.drop(['second'], axis=1)
In [13]:
df_train.head()

3) Data Cleaning and Null Check

  • 데이터와 열에 익숙해지면 다음 단계는 일반적으로 데이터에 누락된 값이 있는지 확인
  • 일반적으로 데이터 세트에서 누락된 값을 시각화하는 것을 선호하는 한 가지 방법은 "missingno"를 사용
In [14]:
import missingno as msno
msno.matrix(df_train, figsize=(12,5))
Out[14]:
<AxesSubplot:>

'Kaggle' 카테고리의 다른 글

2-5  (0) 2022.07.14
2-4. Bike  (0) 2022.07.13
2-3_Bike Sharing Demand  (0) 2022.07.12
2-1_Bike Sharing Demand  (0) 2022.07.10
1_House prices - Advanced Regression Techniques  (0) 2022.07.09