EDA(Exploratory Data Analysis) 즉, 탐색적 데이터 분석을 제대로 하려면 파이썬의 numpy, pandas와 같은 라이브러리를 잘 활용해야 한다. 그 중에 pandas는 다양한 형태의 데이터를 매우 쉽게 확인할 수 있는 기능을 제공한다.
우선 이 포스팅을 진행하는데 사용한 데이터로 iris dataset을 활용했는데 header는 일단 직접 달았기 때문에 아래와 같이 파일을 다운로드 받아서 진행하면 유용할 것 같다.
데이터의 일부만 보여주자면 아래와 같이 생긴 녀석이다.
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
'인공지능 및 데이터과학 > 데이터분석 & 통계' 카테고리의 다른 글
[데이터분석] 엔트로피(Entropy) 이해하기 (0) | 2022.01.31 |
---|---|
[Visualization] Python 히스토그램(histogram) 사용하기 (0) | 2022.01.12 |
확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) (2) | 2020.12.13 |
코사인 유사도(Cosine similarity) 이해 및 Java로 구현하기 (0) | 2020.04.13 |
코로나 바이러스의 통계 분석, 부제 남자가 과연 더 위험할까? (0) | 2020.03.11 |