pandas
ㄴ 데이터 처리와 분석을 위해 사용되며, 표 형태의 데이터를 다루기에 용이
ㄴ Boston 데이터 다운로드하여 준비 해두기
tf01_pd01_boston.ipynb
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# 1. 데이터
path = './_data/'
x_train = pd.read_csv(path + 'train-data.csv') # cvs 파일 불러오는 코드
y_train = pd.read_csv(path + 'train-target.csv') # cvs 파일 불러오는 코드
x_test = pd.read_csv(path + 'test-data.csv') # cvs 파일 불러오는 코드
y_test = pd.read_csv(path + 'test-target.csv') # cvs 파일 불러오는 코드
print(x_train.columns)
print(y_train.columns)
print(x_train.head(7)) # default = 5
tf01_pd02_boston.ipynb
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# 1. 데이터
path = './_data/'
datasets = pd.read_csv(path + 'Boston_house.csv')
print(datasets.columns)
print(datasets.head(7)) # default = 5
x = datasets[['AGE', 'B', 'RM', 'CRIM', 'DIS', 'INDUS', 'LSTAT', 'NOX', 'PTRATIO',
'RAD', 'ZN', 'TAX', 'CHAS']]
y = datasets[['Target']]
print(x.shape, y.shape)
# (506, 13) (506, 1)
# scikit-learn의 train_test_split() 함수를 이용하여 데이터셋을 train set과 test set으로 분리
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, shuffle=True, random_state=77
)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)
# (404, 13) (404, 1)
# (102, 13) (102, 1)
##### 상관계수 히트 맵 #####
import matplotlib.pyplot as plt
import seaborn as sns
# seaborn 안 되는 경우
# pip install seaborn
sns.set(font_scale = 1.2)
sns.set(rc = {'figure.figsize':(9, 6)})
sns.heatmap(data = datasets.corr(), # 상관관계
square = True,
annot = True,
cbar = True
)
plt.show()
heatmap
ㄴ seaborn 의 heatmap
tf01_pd02_boston_heatmap.ipynb
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# 1. 데이터
path = './_data/'
datasets = pd.read_csv(path + 'Boston_house.csv')
print(datasets.columns)
print(datasets.head(7)) # default = 5
x = datasets[['AGE', 'B', 'RM', 'CRIM', 'DIS', 'INDUS', 'LSTAT', 'NOX', 'PTRATIO',
'RAD', 'ZN', 'TAX', 'CHAS']]
y = datasets[['Target']]
print(x.shape, y.shape)
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, shuffle=True, random_state=77
)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)
##### 상관계수 히트 맵 #####
import matplotlib.pyplot as plt
import seaborn as sns
# seaborn 안 되는 경우
# pip install seaborn
sns.set(font_scale = 1.2) # 그래프의 글꼴 크기를 설정
sns.set(rc = {'figure.figsize':(9, 6)}) # 그래프의 크기를 설정
sns.heatmap(data = datasets.corr(), # 상관관계 히트맵을 그립
square = True,
annot = True,
cbar = True
)
# data : 데이터셋의 상관관계 행렬을 입력
# square : 정사각형 모양으로 그릴 것인지를 설정
# annot : 각 셀에 숫자를 표시할지를 설정
# cbar : 컬러바를 그릴 것인지를 설정
plt.show() # 그래프 출력
x_train = x_train.drop(['TAX', 'RAD'], axis=1)
x_test = x_test.drop(['TAX', 'RAD'], axis=1)
print(x_train.shape, x_test.shape)
ㄴ scikit-learn에서 제공하는 train_test_split 함수를 이용하여 데이터를 train set과 test set으로 나눈 뒤, 각각의 set에서 drop 함수 이용하여 'TAX'와 'RAD' 열을 삭제
= > x_train과 x_test에서 'TAX'와 'RAD' 열을 삭제한 이유
ㄴ 이 두 열이 데이터 분포와 상관 없이 각각의 값이 지역별로 고정되어 있는 값이기 때문
ㄴ 따라서 모델이 이 열을 이용해서 지역 정보를 학습하면 예측 성능이 저하될 수 있음
ㄴ 이러한 열을 삭제하여 모델이 데이터의 실제 분포와 상관 있는 정보를 학습하도록 함
** 참고
상관관계(correlation)란?
ㄴ 두 변수 간의 관련성을 나타내는 지표
ㄴ 두 변수가 어떤 선형적인 관계를 갖는지를 파악할 수 있으며, 상관계수(correlation coefficient)라는 값으로 표현됨
ㄴ 상관계수는 -1에서 1까지의 값을 가지며, 1에 가까울수록 양의 상관관계, -1에 가까울수록 음의 상관관계, 0에 가까울수록 무상관ㄴ 상관관계는 두 변수 간의 인과관계를 나타내지는 않지만, 두 변수 사이에 어떤 관련성이 있는지를 파악하는 데 유용
labeling
ㄴ sklearn.preprocessing 의 labelEncoder
tf01_pd02_boston_labeling.ipynb
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# 1. 데이터
path = './_data/'
datasets = pd.read_csv(path + 'Boston_house.csv')
print(datasets.columns)
print(datasets.head(7)) # default = 5
x = datasets[['AGE', 'B', 'RM', 'CRIM', 'DIS', 'INDUS', 'LSTAT', 'NOX', 'PTRATIO',
'RAD', 'ZN', 'TAX', 'CHAS']]
y = datasets[['Target']]
print(x.shape, y.shape)
# (506, 13) (506, 1) --> 데이터셋의 x 와 y 의 크기 확인
print(x.info()) # info() : 컬럼명, null값, 데이터타입 확인
ㄴ 모두 506 으로 null 값 존재하지 않음을 알 수 있음
x.describe()
# 문자를 숫자로 변경 (LabelEncoder)
from sklearn.preprocessing import LabelEncoder
ob_col = list(x.dtypes[x.dtypes=='object'].index) # object 컬럼 리스트 추출 (index 를 가지고옴)
# 라벨링 (object 'string -> int, float')
for col in ob_col:
x[col] = LabelEncoder().fit_transform(x[col].values)
** 참고
LabelEncoder().fit_transform() : 주어진 데이터에 대해 레이블 인코딩을 수행하는 메소드
<예시>
from sklearn.preprocessing import LabelEncoder
# 샘플 데이터
data = ['cat', 'dog', 'cat', 'bird', 'cat', 'dog']
# LabelEncoder로 레이블 인코딩
encoder = LabelEncoder()
encoded_data = encoder.fit_transform(data)
print(encoded_data) # 출력: [0 1 0 2 0 1]
NAN
tf01_pd02_boston_NaN.ipynb
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score
# 1. 데이터
path = './_data/'
datasets = pd.read_csv(path + 'Boston_house.csv')
print(datasets.columns)
print(datasets.head(7)) # default = 5
x = datasets[['AGE', 'B', 'RM', 'CRIM', 'DIS', 'INDUS', 'LSTAT', 'NOX', 'PTRATIO',
'RAD', 'ZN', 'TAX', 'CHAS']]
y = datasets[['Target']]
print(x.shape, y.shape)
# (506, 13) (506, 1)
print(x.info()) # info() 컬럼명, null값, 데이터타입 확인
print(x.describe())
x['NAN'] = np.nan
print(x)
ㄴ 해당 데이터프레임에 'NAN' 이라는 이름을 가진 새로운 열을 추가하고 그 값을 np.nan 으로 설정한 뒤, 전체 데이터프레임 x를 출력하는 코드
# NaN 처리하기
# x = x.fillna(0) # 0으로 채우기
# x = x.fillna(x.mean()) # 해당 컬럼의 mean 값(평균), mode, min, max 값은 컬럼별로 채우기
# x = x.fillna(method='ffill') # 해당 컬럼의 바로 앞 데이터의 값으로 채우기 (front fill)
x = x.fillna(method='bfill') # 해당 컬럼의 바로 뒤의 데이터 값으로 채우기 (back fill)
print(x)
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, shuffle=True, random_state=77
)
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)
# (404, 14) (404, 1)
# (102, 14) (102, 1)
'네이버클라우드 > AI' 카테고리의 다른 글
AI 6일차 (2023-05-15) 인공지능 기초 _머신러닝 - Linear 모델과 SVM 모델 : SVC, SVR (0) | 2023.05.15 |
---|---|
AI 6일차 (2023-05-15) 인공지능 기초 _머신러닝 - 퍼셉트론의 과제 : XOR 문제의 해결 (0) | 2023.05.15 |
AI 5일차 (2023-05-12) 인공지능 기초 - Imdb 와 Rueters (0) | 2023.05.12 |
AI 5일차 (2023-05-12) 인공지능 기초 - Tokenizer 와 Embedding (0) | 2023.05.12 |
AI 5일차 (2023-05-12) 인공지능 기초 - 자연어처리(NLP) 기초 (0) | 2023.05.12 |