import numpy as np
import pandas as pd
np.set_printoptions(precision=6, suppress=True)
PREVIOUS_MAX_ROWS = pd.options.display.max_rows # 원래 60이 기본.
pd.set_option("max_rows", 20)
보스턴 데이터는 보스턴 시의 506개 구역에 대한 통계 자료를 담고 있다. 먼저 보스턴 데이터를 불러온다.
from sklearn.datasets import load_boston
X = load_boston()
X의 자료형을 확인하면 다음과 같다.
type(X)
Bunch 자료형을 dict() 자료형의 차이점은 무엇인가?
답)
X에 사용된 키(key)는 다음과 같다.
X.keys()
data 키의 값은 다음과 같다.
X.data
X.data는 미국 보스턴 시의 구역별 통계자료를 갖고 있으며, (506, 13) 모양의 2차원 어레이다.
각각의 열(column)은 아래 특성을 가리킨다.
| 특성 | 의미 |
|---|---|
| CRIM | 구역별 1인당 범죄율 |
| ZN | 25,000 평방 피트 이상의 주거 구역 비율 |
| INDUS | 구역별 비 소매 사업 에이커(acre) 비율 |
| CHAS | Charles River 더미 변수(구역이 강 경계에 닿으면 1, 아니면 0) |
| NOX | 산화 질소 농도(1000만분 율) |
| RM | 주택 당 평균 방 수 |
| AGE | 소유주가 살고 있는 1940년 이전에 지어진 건물 비율 |
| DIS | 보스턴 고용 센터 다섯 곳 까지의 가중 거리 |
| RAD | 방사형 고속도로 접근성 지수 |
| TAX | 1만달러당 전체 가지 재산 세율 |
| PTRATIO | 구역별 학생-교사 비율 |
| B | 1000(Bk - 0.63)^2 (Bk 구역별 흑인 비율) |
| LSTAT | 구역별 낮은 지위 인구 비율 |
아래 코드가 의미하는 바를 설명하라.
X.data.shape
답)
이제 X.data를 boston 변수에 할당한다.
boston = X.data
열(column)별 이름, 즉 특성별 이름을 지정하면서 판다스의 데이터프레임으로 형변환한다.
특성별 이름은 X의 feature_names 속성에 저장되어 있다.
X.feature_names
boston = pd.DataFrame(X.data, columns=X.feature_names)
boston
원래 결측치가 없지만 아래처럼 고의로 5개의 결측치를 입력한다. 대상은 주택당 평균 방수 특성(RM)의 100번에서 104번행이다.
boston['RM'][100:105] = np.nan
보스턴 전체 데이터셋에서 수치상으로 5개의 값만 결측치임을 보여주는 표현식을 작성하라.
# pass와 None을 각각 적절한 코드와 표현식으로 대체하라.
pass
assert None == 5
결측치가 들어있는 행으로만 이루어진 데이터프레임을 가리키는 boston_with_nan을 정의하라.
# pass와 None을 각각 적절한 코드와 표현식으로 대체하라.
pass
boston_with_nan = None
assert boston_with_nan.shape == (5, 13)
결측치가 들어있는 행을 제외한 데이터프레임을 가리키는 boston_without_nan을 정의하라.
# pass와 None을 각각 적절한 코드와 표현식으로 대체하라.
pass
boston_without_nan = None
assert boston_without_nan.shape == (501, 13)
boston_with_nan이 가리키는 데이터프레임에 사용된 결측치(NaN)를 모두 해당 특성의 평균값(mean)으로 대체하라. 즉,
NaN이 실제로 대체되어야 한다. (경고가 발생하더라도 무시한다.)
# boston_with_nan 데이터프레임에 포함된 모든 결측치를 평균값으로 대체해야 함.
# pass를 적절한 코드로 대체할 것.
pass
# boston_with_nan 데이터프레임에 결측치가 없음을 입증해야 함.
# None 을 적절한 표현식으로 대체할 것.
assert None == False
AGE 특성의 값들에서 소수점 이하를 버리고 남은 정수값(int)만 이용하는 AGE_Year 특성을 추가하라. 즉, 소수점 이하를 버리고 정수형(int)으로 형변환된 값을 이용해야 한다.
# pass와 None을 각각 적절한 코드와 표현식으로 대체하라.
pass
# AGE_Year 특성 추가하기
boston['AGE_Year'] = None
AGE 특성을 삭제하라.
# pass와 None을 각각 적절한 코드와 표현식으로 대체하라.
pass
assert ('AGE' in boston.columns) == False