아래 코드는 인터넷 데이터 저장소로부터 아이리스(붓꽃) 데이터(iris.data
)를
2차원 넘파이 어레이로 불러온다.
# 아이리스(붓꽃) 데이터 불러오기
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris = np.genfromtxt(url, delimiter=',', dtype='str')
iris.data
파일에는 아래 형식의 데이터가 150개 들어 있다.
5.1,3.5,1.4,0.2,Iris-setosa
하나의 데이터에 사용된 값들은 하나의 아이리스(붓꽃)에 대한 꽃잎, 꽃받침과 관련된 특성(features)과 품종을 나타내며, 보다 구체적으로 아래 순서를 따른다.
꽃받침 길이, 꽃받침 너비, 꽃잎 길이, 꽃잎 너비, 품종
iris.shape
길이와 너비를 저장하는 특성들은 숫자로 저장되어 있었지만 위 코드는 문자열로 저장된 품종 특성과의 자료형을 통일시키기 위해 모두 문자열 자료형으로 불러왔다. 처음 5개 데이터를 확인하면 다음과 같다.
참고: '<U15'
는 길이가 최대 15인 유니코드 문자열 자료형을 나타낸다.
iris[:5]
수치형 데이터와 품종 데이터를 분리해서 각각 (150,4), (150,) 모양의 어레이를 생성하자.
이때 수치형 데이터는 'f8'
, 즉 'float64'
자료형을 사용하도록 한다.
iris_features = iris[:,:4].astype('f8')
iris_labels = iris[:, 4]
iris_features[:5]
150개의 데이터는 아래 세 개의 품종으로 구분되며, 각각 50개씩 아래 언급된 순서대로 구분되어 있다.
'Iris-setosa', 'Iris-versicolor', 'Iris-virginica'
즉, 0번, 50번, 100번부터 각 품종의 데이터가 시작된다.
iris_labels[::50]
iris_labels[:5]
iris_labels[50:55]
iris_labels[100:105]
과제 1. 꽃잎 길이(2번 열)가 1.5보다 크거나 꽃받침 길이(0번 열)가 5.0보다 작은 데이터만 추출하라.
# None을 적절한 부울 표현식으로 대체하라.
mask = None
iris_features[mask]
과제 2. 꽃받침 길이(0번 열)와 꽃잎 길이(2번 열) 사이의 상관관계를 계산하라.
힌트: 넘파이의 적절한 함수를 활용한다. 상관계수에 대한 설명은 위키백과: 상관분석을 참고한다.
# 적절한 넘파이 함수를 호출하라.
과제 3. 아래 식으로 계산된 값을 갖는 새로운 열(column)이 추가된 2차원 어레이 iris_features_added
를 생성하라.
힌트: np.stack()
함수를 활용할 수 있다.
# pass와 None을 각각 적절한 코드와 표현식으로 대체하라.
pass
iris_features_added = None
assert iris_features_added.shape == (150, 5)
iris_features_added[:5]
과제 4. Iris_versicolor
품종에 해당하는 데이터만 iris_features
로부터 추출하라.
# None을 적절한 부울 표현식으로 대체하라.
mask = None
iris_features[mask][:5]
과제 5. 꽃받침 길이(0번 열)의 평균값(mean), 중앙값(median), 표준편차(standard deviation)를 구하라.
# None을 적절한 표현식으로 대체하라.
petal_length_mean = None
petal_length_median = None
petal_length_std = None
print(petal_length_mean, petal_length_median, petal_length_std)
과제 6. 세 개의 품종 별 꽃받침 너비(1번 열)의 평균값을 계산하여 아래 어레이와 동일한 모양을 갖는
어레이 iris_kind_sepal_length
를 생성하라.
[['Iris-setosa', 3.418],
['Iris-versicolor', 2.770],
['Iris-virginica', 2.974]]
# pass와 None을 각각 적절한 코드와 표현식으로 대체하라.
pass
iris_kind_sepal_length = None
iris_kind_sepal_length
과제 7. 꽃잎 너비(3번 열)에 사용된 값을 모두 0과 1사이의 값으로 변환하라.
힌트: 꽃잎 너비 등 하나의 특성에 속하는 값을 모두 0과 1사이의 값으로 변환하는 작업을 정규화(normalization)라 한다. 정규화에 대한 설명은 정규화/표준화를 참고하라.
# None을 적절한 부울 표현식으로 대체하라.
iris_features_normalized = None
iris_features_normalized[:5]
과제 8. iris_features
에 사용된 모든 값을 특성 별로 표준화(standardization)하라.
힌트: 표준화에 대한 설명은 정규화/표준화를 참고하라.
# None을 적절한 부울 표현식으로 대체하라.
iris_features_standardized = None
iris_features_standardized[:5]