본문 바로가기
데이터 이해하기/시각화

데이터 기초 통계 분석 시각화

by ag_zero 2021. 11. 4.
728x90

통계 분석

describe()

pandas의 DataFrame은 describe이라는 각 컬럼의 평균값, 최대치, 최소치, 편차 등을 알 수 있는 메소드가 있다.

 

연습을 위해 iris데이터를 불러온다.

from sklearn.datasets import load_iris
iris=load_iris()

 

처음 불러오면 위와 같이 배열로 되어있기 때문에 DataFram형태로 바꿔준다.

# feature_names 와 target을 레코드로 갖는 데이터프레임 생성
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df['target'] = iris.target

# 0.0, 1.0, 2.0으로 표현된 label을 문자열로 매핑
iris_df['target'] = iris_df['target'].map({0:"setosa", 1:"versicolor", 2:"virginica"})
 iris_df

 

describe를 사용해 통계치를 확인한다.

data_description = iris_df.describe()
data_description

이 통계치를 활용하면 분포를 가늠하기 쉽다!

 

coloumns = ['sepal length (cm)' , 'sepal width (cm)', 'petal length (cm)','petal width (cm)']

plt.style.use('fivethirtyeight') # 스타일 바꾸기
fig, ax =plt.subplots(2,2, figsize = (10, 10)) 
fig.suptitle('Histogram of coloumns', fontsize=40)

column_idx = 0
for i in range(2):
    for j in range(2):
        ax[i][j].hist(iris_df[coloumns[column_idx]], bins=30, color='#eaa18a', edgecolor='#7bcabf')
        ax[i][j].set_title(coloumns[column_idx])
       
        #평균
        ax[i][j].axvline(data_description[coloumns[column_idx]]['mean'], c='#f55354', 
        label = f"mean = {round(data_description[coloumns[column_idx]]['mean'], 2)}")
        
        #중앙값
        ax[i][j].axvline(data_description[coloumns[column_idx]]['50%'], c='#518d7d', 
        label = f"median = {round(data_description[coloumns[column_idx]]['50%'], 2)}")
        
        ax[i][j].legend()
        column_idx += 1

 

이렇게 하면 분포와 중앙값, 평균을 함께 확인할 수 있다.

 

이상치 확인

sns.boxplot()

boxplot 명령은 박스-휘스커 플롯(Box-Whisker Plot) 혹은 간단히 박스 플롯이라 부르는 차트를 그려준다. 

- 박스는 실수 값 분포에서 1사분위수(Q1)3사분위수(Q3)를 뜻하고 이 3사분위수와 1사분수의 차이(Q3 - Q1)IQR(interquartile range)라고 한다.

- 박스 내부의 가로선은 중앙값을 나타낸다.

- 박스 외부의 세로선은 1사분위 수보다 1.5 x IQR 만큼 낮은 값과 3사분위 수보다 1.5 x IQR 만큼 높은 값의 구간을 기준으로 그 구간의 내부에 있는 가장 큰 데이터와 가장 작은 데이터를 잇는 선분이다.

- 그 바깥의 점은 아웃라이어(outlier)라고 부르는데 일일히 점으로 표시한다.

- 아웃라이어(outlier)는 이상치로 판단할 수 있는 값이다.

 

sns.boxplot(iris_df['sepal width (cm)'])

 

 

 

'데이터 이해하기 > 시각화' 카테고리의 다른 글

plt.style.use() - matplotlib 테마 바꾸기  (0) 2021.11.04