인공지능 및 데이터과학/데이터분석 & 통계

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

Steve Jang 2021. 5. 28. 00:14

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