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