본문 바로가기
공부 목록/IT & 프로그래밍

파이썬 데이터 셋 이용하여 분석 및 코딩 연습 (feat. iris dataset)

by 독학박사 2023. 5. 27.

목차


     파이썬을 사용하여 데이터 분석이나 머신러닝을 공부하기 위해서는 데이터 셋이 필수적입니다. 파이썬의 몇몇 라이브러리들 중에는 이러한 데이터 셋을 제공해 주고 있습니다. 오늘은 이 중에서 가장 많이 사용되는 iris dataset(붓꽃 잎의 길이와  데이터) 대해 정리해 보려고 합니다.

     

     

    파이썬 제공 데이터 iris dataset 사용
    파이썬 제공 데이터 iris dataset 사용

     

     1. Iris data set이란?

    Seaborn은 데이터 시각화를 위한 Python 라이브러리로, 기본적으로 많이 사용되는 데이터셋 중 하나인 iris 데이터셋을 제공합니다. iris 데이터셋은 통계학자 Ronald Fisher가 1936년에 도입한 붓꽃(iris)의 세 가지 종류에 대한 측정값을 포함하고 있습니다.

     

    iris 데이터셋에는 총 150개의 샘플이 있으며, 3가지 종류의 붓꽃(iris setosa, iris virginica, iris versicolor) 각각 50개의 샘플이 포함되어 있습니다. 측정값은 4가지 특성(feature)으로 구성되어 있으며, 각 특성은 붓꽃의 꽃받침 길이(sepal length), 꽃받침 너비(sepal width), 꽃잎 길이(petal length), 꽃잎 너비(petal width)를 나타냅니다.

     

    이러한 측정값들은 데이터 분석 및 시각화 등 다양한 목적으로 활용될 수 있습니다. Seaborn 라이브러리를 사용하여 iris 데이터셋을 불러오면, 데이터셋의 구성과 관련된 정보를 쉽게 확인하고 분석할 수 있습니다. 예를 들어, 각 붓꽃 종류별로 특성들의 분포를 시각화하여 분류 문제나 특성 간의 관계를 탐색하는 데 활용할 수 있습니다.

     

     

     2. iris dataset 이용한 데이터 분석 종류

     일반적으로 대학교나 인터넷 강의들에서 iris dataset 많이 사용합니다. 데이터 셋을 사용  아래의 목적에 의해 강의 내용이 꾸려지곤 합니다.

     

    데이터 분포 시각화:

    iris 데이터셋의 특성들을 산점도나 히스토그램 등을 이용하여 시각화하여 데이터의 분포를 파악할 수 있습니다. 예를 들어, 각 붓꽃 종류별로 꽃받침 길이와 너비의 관계를 산점도로 나타내거나, 꽃잎 길이의 분포를 히스토그램으로 나타낼 수 있습니다.

     

    분류 문제:

    iris 데이터셋은 각각의 샘플이 세 가지 종류의 붓꽃 중 어떤 종류인지를 나타내는 레이블(붓꽃 종류)을 가지고 있습니다. 이를 활용하여 분류 문제를 해결할 수 있습니다. 예를 들어, 붓꽃의 특성을 입력으로 받아 해당 붓꽃의 종류를 예측하는 분류 모델을 학습하고 평가할 수 있습니다. 로지스틱 회귀, 결정 트리, 서포트 벡터 머신 등의 분류 알고리즘을 활용할 수 있습니다.

     

    특성 상관관계 분석:

    iris 데이터셋의 특성들 간의 상관관계를 분석할 수 있습니다. 예를 들어, 꽃받침 길이와 너비의 상관관계를 산점도나 히트맵으로 시각화하여 확인할 수 있습니다. 이를 통해 특성들 간의 연관성을 파악하고, 분석 결과를 통해 도출된 특성 중요도 등을 활용할 수 있습니다.

     

    다중 변수 분석:

    iris 데이터셋은 4개의 특성으로 구성되어 있으므로, 다중 변수 분석에 활용할 수 있습니다. 예를 들어, PCA(주성분 분석)를 통해 주요 성분을 추출하고 시각화할 수 있습니다. 또는 다른 특성 추출 또는 차원 축소 기법을 적용하여 데이터를 변환하고, 변환된 데이터에 대해 클러스터링 분석 등을 수행할 수 있습니다.

     

     3. iris dataset 가져오기

     iris dataset 데이터로 불러오는 방법은 2가지로 설명드립니다. 우선 seaborn 라이브러리를 이용한 방법으로 코드는 아래와 같이 작성합니다.

     

    import seaborn as sns
    
    iris = sns.load_dataset('iris')

     

    seaborn에서 가져온 iris dataset 형태
    seaborn에서 가져온 iris dataset 형태

     

    iris data 셋의 모양
    iris data 셋의 모양, 출처 : https://machinelearninghd.com

     

     

    이렇게 불어온 데이터는 데이터 프레임 타입으로 iris 변수에 저장됩니다. 총데이터의 수는 150개이며,  5개의 칼럼으로 구성되어 있습니다. 처음 4개의 칼럼은 종별 잎의 길이나 너비의 데이터이며, 마지막 열은 붓꽃의 종을 나타 냅니다. 흔히들 이것을 라벨(y)이라 부르며 학습  목적값이 됩니다.

     

     

     scikit-learn 라이브러리에서 iris 데이터 셋을 호출하는 방법은 다음과 같은 코드를 작성하는 겁니다.

     

    from sklearn.datasets import load_iris
    
    iris = load_iris()
    
    X = iris.data
    y - iris.target

     

    sklearn 에서 가져온 iris dataset 형태
    sklearn 에서 가져온 iris dataset 형태

     

    sklearn에서 load_iris() 사용하여 데이터를 불러오면 sklearn 데이터  타입으로 로딩됩니다. 데이터 프레임 타입이 아니므로 데이터를 사용하기 위해서는 iris.data iris.target 같이 데이터와 라벨을 따로 분리해 주어야 합니다.

     

     4. iris 데이터를 이용한 예측 코드

     오늘 포스팅에서는 seaborn에서 데이터 셋을 가져온다 가정하고 예제 코드를 보여드리도록 하겠습니다. 이번 예측은 꽃잎의 길이와 라벨(붓꽃 종류) 미리 학습시킨 , 학습된 모델에 꽃잎의 다른 길이를 입력하였을  꽃의 종류를 맞추는 겁니다

     

    import pandas as pd
    import seaborn as sns
    
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import LabelEncoder
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.metrics import accuracy_score
    
    # iris 데이터셋 불러오기
    iris = sns.load_dataset('iris')
    
    # 입력(X)과 출력(y) 분리
    X = iris.drop('species', axis=1)
    y = iris['species']
    
    # 레이블 인코딩
    label_encoder = LabelEncoder()
    y = label_encoder.fit_transform(y)
    
    # 학습 데이터셋과 테스트 데이터셋 분리
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # K-NN 분류 모델 학습
    knn = KNeighborsClassifier(n_neighbors=3)
    knn.fit(X_train, y_train)
    
    # 테스트 데이터셋 예측
    y_pred = knn.predict(X_test)
    
    # 정확도 평가
    accuracy = accuracy_score(y_test, y_pred)
    print('Accuracy:', accuracy)
    
    
    # 결과값
    # Accuracy: 1.0

     

    위의 코드를 실행하면, iris 데이터셋을 불러온 후 입력(X)과 출력(y)으로 분리합니다.  출력(y)에는 붓꽃 종류를 나타내는 레이블이 문자열로 되어 있으므로, LabelEncoder를 사용하여 숫자 형태로 변환합니다. 그리고 학습 데이터셋과 테스트 데이터셋을 분리하여 80%는 학습에 사용하고 20%는 평가에 사용합니다. (주석 : 학습 데이터셋과 테스트 데이터셋 분리, train_test_split() 함수 사용)

     

    K-NN(K-Nearest Neighbors) 분류 모델을 학습합니다. 이 예제에서는 n_neighbors=3로 설정하여 가장 가까운 3개의 이웃을 기준으로 분류합니다. 그리고 테스트 데이터셋을 사용하여 예측을 수행하고, 예측 결과와 실제 레이블을 비교하여 정확도를 계산하여 출력합니다. 해당 코드에서 나온 결과값이 accuracy가 '1'입니다. 이는 정확하게 모두 맞췄다는 의미입니다.

     

    결과에 대해 정확한 내용을 확인하고 싶을 경우 y_pred 데이터와 y_test 데이터를 비교하면 됩니다. y_pred는 사전에 학습시킨 모델에 X-test값을 넣어 생성한 값이고, y_test는 X_test와 상응하는 원래의 y값입니다. y_pred와 y_test가 일치한다면 모델 학습이 잘 된 것으로 판단합니다.

     

    분류 모델의 선택과 매개변수 설정은 문제에 따라 다를 수 있으며, 해당 예제에서는 K-NN 분류기를 사용하였지만 다른 알고리즘을 선택하여 분류 문제를 해결할 수도 있습니다.

     

     

    5. 마치며

     파이썬의 데이터 분석이나 머신러닝 또는 딥러닝을 공부하거나 연습할 때 데이터 셋은 꼭 필요합니다. 고맙게도 파이썬의 라이브러리들이 각 분야의 공부에 맞는 데이터셋을 제공해 주고 있습니다. 우리는 데이터 셋 종류에는 어떤 것이 있으며 각 데이터 셋이 어떤 연습에 필요한지 알아둘 필요가 있습니다. 오늘은 이러한 첫 번째로 iris dataset을 다뤘습니다. 다른 데이터셋에 대한 내용도 지속적으로 업로드할 예정입니다.