[Python] 판다스(Pandas)로 데이터 확인 및 기초통계 하기

    EDA(Exploratory Data Analysis) 즉, 탐색적 데이터 분석을 제대로 하려면 파이썬의 numpy, pandas와 같은 라이브러리를 잘 활용해야 한다. 그 중에 pandas는 다양한 형태의 데이터를 매우 쉽게 확인할 수 있는 기능을 제공한다.

     

    우선 이 포스팅을 진행하는데 사용한 데이터로 iris dataset을 활용했는데 header는 일단 직접 달았기 때문에 아래와 같이 파일을 다운로드 받아서 진행하면 유용할 것 같다.

     

    iris.csv
    0.00MB

     

    판다스 데이터 확인 및 기초통계

     

    데이터의 일부만 보여주자면 아래와 같이 생긴 녀석이다. 

    sepal_length,sepal_width,petal_length,petal_width,class
    1,5.1,3.5,1.4,0.2,Iris-setosa
    2,4.9,3,1.4,0.2,Iris-setosa
    3,4.7,3.2,1.3,0.2,Iris-setosa

     

    우선 위 데이터를 판다스(Pandas)로 활용하기 위해서 read_csv로 데이터를 읽는다.

    import pandas as pd
    
    # 아이리스 데이터를 읽는다
    df = pd.read_csv('./dataset/iris.csv')

     

    head()

    그리고 데이터의 모양이 어떤지 파이썬으로 확인을 해보도록 한다.

    # iris 일부 확인 (앞부분)
    print(df.head())
    sepal_length  sepal_width  petal_length  petal_width        class
    1           5.1          3.5           1.4          0.2  Iris-setosa
    2           4.9          3.0           1.4          0.2  Iris-setosa
    3           4.7          3.2           1.3          0.2  Iris-setosa
    4           4.6          3.1           1.5          0.2  Iris-setosa
    5           5.0          3.6           1.4          0.2  Iris-setosa

     

    tail()

    head는 앞부분만 확인이 가능한데 뒷부분도 확인하고 싶으면..

    # iris 일부 확인 (뒷부분)
    print(df.tail())
    sepal_length  sepal_width  petal_length  petal_width           class
    146           6.7          3.0           5.2          2.3  Iris-virginica
    147           6.3          2.5           5.0          1.9  Iris-virginica
    148           6.5          3.0           5.2          2.0  Iris-virginica
    149           6.2          3.4           5.4          2.3  Iris-virginica
    150           5.9          3.0           5.1          1.8  Iris-virginica

     

    info()

    데이터의 요약정보를 한번 확인해본다.

    # 데이터 요약정보 확인하기
    print(df.info())
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 150 entries, 1 to 150
    Data columns (total 5 columns):
     #   Column        Non-Null Count  Dtype  
    ---  ------        --------------  -----  
     0   sepal_length  150 non-null    float64
     1   sepal_width   150 non-null    float64
     2   petal_length  150 non-null    float64
     3   petal_width   150 non-null    float64
     4   class         150 non-null    object 
    dtypes: float64(4), object(1)
    memory usage: 7.0+ KB
    None

     

    데이터의 형태가 어떤지 확인을 했다면 이제 아이리스 데이터를 기반으로 기초통계를 수행해보도록 한다.

     

    max()

    일단 sepal length(꽃받침 길이)를 기준으로 최대값을 구한다

    print('sepal_length 최대값->', df['sepal_length'].max())
    sepal_length 최대값-> 7.9

     

    min()

    최대값을 구해봤으니 이번에는 꽃받침 길이의 최소값을 구한다

    print('sepal_length 최소값->', df['sepal_length'].min())
    sepal_length 최소값-> 4.3

     

    mean()

    꽃받침 데이터들의 평균값을 구한다

    print('sepal_length 평균값->', df['sepal_length'].mean())
    sepal_length 평균값-> 5.843333333333335

     

    std()

    꽃받침 데이터들의 표준편차값을 구한다

    print('sepal_length 표준편차값->', df['sepal_length'].std())
    sepal_length 표준편차값-> 0.8280661279778629

     

    describe()

    describe를 사용하여 데이터의 통계적 분포를 한번에 확인할수도 있다.

    print(df.describe())
           sepal_length  sepal_width  petal_length  petal_width
    count    150.000000   150.000000    150.000000   150.000000
    mean       5.843333     3.054000      3.758667     1.198667
    std        0.828066     0.433594      1.764420     0.763161
    min        4.300000     2.000000      1.000000     0.100000
    25%        5.100000     2.800000      1.600000     0.300000
    50%        5.800000     3.000000      4.350000     1.300000
    75%        6.400000     3.300000      5.100000     1.800000
    max        7.900000     4.400000      6.900000     2.500000

     

    그러나 뭔가 빠진것 같은 느낌이 든다. class가 보이질 않는데 class는 문자열 데이터로 이루어졌기 때문이다. 이번에는 include 인자값을 활용하여 문자열 컬럼의 데이터도 보도록 한다.

    print(df.describe(include='all'))
            sepal_length  sepal_width  petal_length  petal_width            class
    count     150.000000   150.000000    150.000000   150.000000              150
    unique           NaN          NaN           NaN          NaN                3
    top              NaN          NaN           NaN          NaN  Iris-versicolor
    freq             NaN          NaN           NaN          NaN               50
    mean        5.843333     3.054000      3.758667     1.198667              NaN
    std         0.828066     0.433594      1.764420     0.763161              NaN
    min         4.300000     2.000000      1.000000     0.100000              NaN
    25%         5.100000     2.800000      1.600000     0.300000              NaN
    50%         5.800000     3.000000      4.350000     1.300000              NaN
    75%         6.400000     3.300000      5.100000     1.800000              NaN
    max         7.900000     4.400000      6.900000     2.500000              NaN

    include="all"을 사용하면 보이지 않던 unique, top, freq 라는 통계가 추가로 보여진다.

     

    value_counts()

    데이터의 고유값의 개수를 확인하고 싶으면 value_counts를 사용한다

    print(df['class'].value_counts())
    Iris-versicolor    50
    Iris-setosa        50
    Iris-virginica     50
    Name: class, dtype: int64

     

    댓글

    Designed by JB FACTORY