$ git push -u origin main
To https://github.com/HJ0216/TIL.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/HJ0216/TIL.git'
⭐ 서울시 따릉이 대여량 예측 경진대회 자료를 통한 Pandas pkg 및 결측치(Missing Value) 처리 방법
# dacon_seoul_ddarung.py
# dacon_seoul_ddarung data: https://dacon.io/competitions/open/235576/data
import numpy as np
import pandas as pd
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 1. Data
path = './_data/ddarung/'
# 동일한 경로의 파일을 여러번 당겨올 경우, 변수를 지정해서 사용
# ./ = 현재 폴더
# _data/ = _data 폴더
# ddarung/ = ddarung 폴더
train_csv = pd.read_csv(path+'train.csv', index_col=0)
# path + 'train.csv': ./_data/ddarung/train.csv
# index_col을 입력하지 않을 경우 idx도 데이터로 인식하게 됨 (0번째 column은 data가 아닌 idx임을 안내)
# print(train_csv) [1459 rows x 11 columns] -> [1459 rows x 10 columns]
test_csv = pd.read_csv(path+'test.csv', index_col=0)
submission = pd.read_csv(path+'submission.csv', index_col=0)
print(train_csv.columns) # sklearn.feature_names
print(train_csv.info())
# null 값 제외 출력
# Int64Index: 715 entries, 총 데이터 수
# 결측치: 총 데이터 수 - Non-Null (수집못한 데이터)
print(test_csv.info()) # info -> null이 아닌 값(Non-Null) 출력
print(train_csv.describe()) # sklearn.DESC
# 결측치 처리 - '결측 데이터 제거'
print(train_csv.isnull().sum()) # data_set의 결측치(Null) 값 총계 출력
train_csv = train_csv.dropna() # pandas.dropna(): null 값을 포함한 데이터 행 삭제
x = train_csv.drop(['count'], axis=1)
# count column 삭제
# axis=0: index, axis: columns
print(x.shape) # [1459 rows x 9 columns] -> dropna로 인한 변경
y = train_csv['count']
print(y.shape)
x_train, x_test, y_train, y_test = train_test_split(
x, y,
shuffle=True,
train_size=0.7,
random_state=1234
)
print(x_train.shape, x_test.shape) #(1021, 9) (438, 9)
print(y_train.shape, y_test.shape) #(1021, ) (438, )
# 2. model
model = Sequential()
model.add(Dense(64, input_dim=9)) # input_dim = 9
model.add(Dense(64))
model.add(Dense(32))
model.add(Dense(16))
model.add(Dense(1)) # output_dim = 1
# 3. compile and train
model.compile(loss='mse', optimizer='adam') # RMSE가 평가지표이므로 유사한 mse 사용
model.fit(x_train, y_train, epochs=128, batch_size=32)
# 4. evaluate and predict
loss = model.evaluate(x_test, y_test)
print("Loss: ", loss)
y_predict = model.predict(x_test)
# test는 y값이 없으므로 train의 test dataset 사용
def RMSE (y_test, y_predict):
return np.sqrt(mean_squared_error(y_test, y_predict))
rmse = RMSE(y_test, y_predict)
print("RMSE: ", rmse)
# for submission
y_submit = model.predict(test_csv) # predict() return numpy
submission['count'] = y_submit
# pandas(submission['count'])에 numpy(y_submit)를 직접 대입시키면 numpy가 pandas가 됨
submission.to_csv(path+'submission_230121.csv')
'''
Result
'''
⭐ Python Pandas 관련 유용한 Method 정리 pandas.read_cvs(): cvs file read pandas.columns: column name
pandas.info(): null이 아닌 값(Non-Null) 출력 pandas.describe(): data description pandas.isnull(): null 값 출력 pandas.dropna(): null data delete pandas.drop(): column delete
⭐ Data Missing Value(결측치) 처리 방법 1. 삭제
1.1. 결측치 데이터의 행 삭제
1.2. 결측치 데이터의 열 삭제
2. 대체
2.1. 이전 행 값으로 대체
2.2. 다음 행 값으로 대체
2.3. 원하는 값으로 대체
2.4. 보간법으로 대체
→ method와 limit_direction에 따라 다르게 나타남
→ Data 값을 선형에 비례하는 값으로 결측값을 보간함
2.5. 해당 열의 결측치를 제외한 평균값으로 대체
Pandas Dataset을 활용한 결측치 처리 예제
# missing_value_handling.py
import pandas as pd
dataset = pd.DataFrame([
{'id': 1, 'val': None, 'pw': 2},
{'id': 2, 'val': 21, 'pw': 3},
{'id': 3, 'val': 19, 'pw': 0},
{'id': 4, 'val': 24, 'pw': 1},
{'id': None, 'val': 15, 'pw': 2},
{'id': 5, 'val': 9, 'pw': 2},
{'id': 6, 'val': 33, 'pw': 1},
{'id': None, 'val': 40, 'pw': 2}
])
print(dataset)
'''
id val pw
0 1.0 NaN 2
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
4 NaN 15.0 2
5 5.0 9.0 2
6 6.0 33.0 1
7 NaN 40.0 2
'''
# 1.1. 행 삭제
dataset_rev1 = dataset.dropna()
print(dataset_rev1)
'''
id val pw
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
5 5.0 9.0 2
6 6.0 33.0 1
'''
# 1.2. 열 삭제
dataset_rev2 = dataset.dropna(axis='columns')
print(dataset_rev2)
'''
pw
0 2
1 3
2 0
3 1
4 2
5 2
6 1
7 2
'''
# 2.1. 이전 행 값으로 대체
dataset_rev3 = dataset.fillna(method='pad')
print(dataset_rev3)
'''
id val pw
0 1.0 NaN 2
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
4 4.0 15.0 2
5 5.0 9.0 2
6 6.0 33.0 1
7 6.0 40.0 2
이전 값이 없는 0번째 행은 NaN값 유지
'''
# 2.2. 다음 행 값으로 대체
dataset_rev4 = dataset.fillna(method='bfill')
print(dataset_rev4)
'''
id val pw
0 1.0 21.0 2
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
4 5.0 15.0 2
5 5.0 9.0 2
6 6.0 33.0 1
7 NaN 40.0 2
다음 값이 없는 7번째 행은 NaN값 유지
'''
# 2.3. 원하는 값으로 대체
dataset_rev5 = dataset.fillna(0) # 0으로 대체
print(dataset_rev5)
'''
id val pw
0 1.0 0.0 2
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
4 0.0 15.0 2
5 5.0 9.0 2
6 6.0 33.0 1
7 0.0 40.0 2
'''
# 2.4. 보간법으로 대체
dataset_rev6 = dataset.interpolate(method='linear',limit_direction='forward')
# 선형 비례 방법을 위에서부터 아래로 적용하여 NaN 값 채우기(0번째 행 제외)
dataset_rev6 = dataset.interpolate(method='linear',limit_direction='backward')
# 선형 비례 방법을 위에서부터 아래로 적용하여 NaN 값 채우기(7번째 행 제외)
print(dataset_rev6)
'''
forward
id val pw
0 1.0 NaN 2
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
4 4.5 15.0 2
5 5.0 9.0 2
6 6.0 33.0 1
7 6.0 40.0 2
backward
id val pw
0 1.0 21.0 2
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
4 4.5 15.0 2
5 5.0 9.0 2
6 6.0 33.0 1
7 NaN 40.0 2
'''
# 2.5. 결측치 값으로 제외한 평균값으로 대체
dataset_rev7 = dataset.fillna(dataset.mean())
print(dataset_rev7)
'''
id val pw
0 1.0 23.0 2
1 2.0 21.0 3
2 3.0 19.0 0
3 4.0 24.0 1
4 3.5 15.0 2
5 5.0 9.0 2
6 6.0 33.0 1
7 3.5 40.0 2
'''
4. D drive 내 'program' 폴더 생성 program 폴더 내에 해당 파일(다운로드 받은 파일 3개) 복사 (Ncvidia Driver) 527.56-desktop-win10-win11-64bit-international-dch-whql (cuda) cuda_11.4.4_472.50_windows (cuDNN) cudnn-11.4-windows-x64-v8.2.4.15
D drive -> 프로그램 폴더 내 4.1. (Nvidia Driver) 527.56-desktop-win10-win11-64bit-international-dch-whql 실행 → driver만 설치, 사용자 정의 설치, 전체 설치
4.2. (cuda) cuda_11.4.4_472.50_windows → 동의 및 계속, 사용자 정의 설치 ⚠️ Cuda 내 VS Integration 설치 제외, samples 설치 제외, Documentation 제외 GeForce 설치 제외 Component * 2 설치 제외
4.3. (cuDNN)cudnn-11.4-windows-x64-v8.2.4.15.zip D drive에 zip 파일 풀기
4.4. C Drive -> 보기: 파일 확장명, 숨김 항목 표시 클릭 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4 → NVIDIA GPU Computing Toolkit\CUDA\v11.4 확인 ⚠️ 가장 최신 버전의 CUDA가 아닌 가장 최근에 다운 받은 버전이 실행됨
4.5. D Drive에 담긴 프로그램 폴더 내 Cuda 폴더 내 파일 4개 (bin, include, lib, NVIDIA_SLA_cuDNN_Support.txt)를 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4에 복사해서 덮어쓰기
⭐ 설치 확인 cmd nvidia-smi: 그래픽 드라이버 설치 확인 nvcc -V or nvcc --version : cuda ver 확인